EKG2, dump sprawdzanie nowych wiadomośći przez skrypt
: 21 sierpnia 2009, 16:26
Mam coś takiego:
Cały ten kod jest odpowiedzialny za sprawdzanie na bieżąco czy ktoś napisał wiadomość na ekg2. Ale opiszę to krok po kroku, na początku sprawdzany jest plik kill, w którym jeśli zmienna killekg2 osiągnie 1 skrypt ma być zabity, a killekg2 ma powrócić z powrotem do 0. Dalej skrypt sprawdza czy istnieje plik ekg2-dump.txt jeśli nie to dodaje na końcu pliku ~/.ekg2/config odpowiednią linijkę żeby ten plik utworzyć i idzie dalej, następnie sprawdza czy ktoś rozpoczął ze mną rozmowę. Jeśli tak zapisuje jego nazwę do pliku ekg2. Dalej pomagał mi KamilSilver, który napisał część sprawdzającą ile linijek ma plik ekg2 jeśli tyle samo co ggmsgustalone wtedy wyświetla daną wiadomość jeśli zaś więcej inną. Skrypt pozornie działa ale nie tak jak należy. Tzn. wykonuje jedno sprawdzenie i się zacina - jeżeli będziemy go wyłączać i włączać działa jak należy ale tu chodzi o sprawdzanie na bieżąco i jeśli się coś zmieni w pliku ekg2 (przybędzie linijka) wykonywać daną akcję.
Ps. Mam nadzieję, że rozumiecie o co mi chodzi.
Kod: Zaznacz cały
linia=1 # aktualna sprawdzana linia
clear
while [ 1 ]; do
source .kill
if [ $killekg2 = "1" ]; then
sleep 1
sed -i 's/killekg2="1"/killekg2="0"/g' ".kill"
exit;fi
# KONIEC SPRAWDZANIA SYGNA£U KILL
if [ ! -f "ekg2-dump.txt" ]; then
echo "timer (null) */1 dump" >> ~/.ekg2/config
fi
cat ekg2-dump.txt | awk -F"Rozmowa z " '/Rozmowa z/{print $2}' | awk -F" rozpoczęta" '{print $1}' > ekg2
ggodkogo=$(cat 'ekg2'| tr '\n' ' ')
if [ -f "ekg2" ]; then ilemalini=$(cat "ekg2" | wc -l); fi # sprawdź ile ma teraz plik linii
while [ -z "$LINE" ]; do # cos tu trzeba zmienic (warunek)
LINE=$(sed -n ${linia}p "ekg2")
if [ ! -z "$LINE" ]; then # zmienić warunek ifa
let nrlinii=$linia
if [ $nrlinii = $ggmsgustalone ]; then echo "Plik ekg2 osiągną ustaloną ilość linijek $ggmsgustalone" #sprawdzamy czy jest inne oraz równe
elif [ $nrlinii -gt $ggmsgustalone ]; then echo "Masz już $nrlinii wiadomości od: $ggodkogo" #sprawdzamy czy jest inne oraz większe
fi #kończymy sprawdzanie
fi
if [ $ilemalini -lt $linia ]; then
sleep 1;
fi
done
LINE=""
let linia+=1
done
Ps. Mam nadzieję, że rozumiecie o co mi chodzi.