Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Cześć.
Proszę się ze mnie nie śmiać ale jestem początkującym jeśli chodzi o pisanie skryptów. Na razie stworzyłem sobie taką prostą pętelkę:
while IFS= read -r line;
do
timeout 10 wine program.exe $line parametry "" | ?????????
#Zabicie procesu lub zapisanie wyniku do wynik.txt
done < plik.txtChciałbym, żeby jak w tym co zwróci program.exe pojawi się string, np. "MainWindow::start" wrzucić do wynik.txt linijki "Dla $line udało się wyświetlić okienko" lub gdy w wyniku pojawi się "Fatal error" wykonać komendę killall program.exe. Nie wiem tylko, co umieścić w miejsce znaków zapytania
Ostatnio edytowany przez sblam (2020-09-09 12:45:10)
Offline

Użytkownik


#!/bin/bash
while IFS= read -r line; do
wynik=$(timeout 10 wine program.exe "$line" parametry "")
if [[ "$wynik" =~ "MainWindow::start" ]]; then
echo "Dla $line udało się wyświetlić okienko" | tee -a wynik.txt
elif [[ "$wynik" =~ "Fatal error" ]]; then
killall program.exe
fi
done < plik.txtOstatnio edytowany przez megabajt (2020-09-09 14:01:52)
Offline
Dzięki ale to nie do końca to co miało być. Co prawda zapisuje informację, które okienko udało się wygenerować ale zmienna $wynik zapełnia się dopiero po przekroczeniu timeoutu tzn po wykonaniu programu więc killall mija się z celem. Potrzebowałbym czegoś, co odczytuje $wynik linijka po linijce.
Offline

Użytkownik


#!/bin/bash
while IFS= read -r line; do
wynik=$(timeout 10 wine program.exe "$line" parametry "" | grep -q -m 1 "Fatal error" && killall program.exe )
if [[ "$wynik" =~ "MainWindow::start" ]]; then
echo "Dla $line udało się wyświetlić okienko" | tee -a wynik.txt
fi
done < plik.txtOffline
Niestety tutaj też czeka do końca timeouta a chodzi mi, żeby zabiło program jak tylko usłyszy "Fatal error" (zdarza się to już zwykle po 2-3 sekundach)
Offline

Użytkownik


https://stackoverflow.com/questions/26777283/make-g … finds-a-match
#!/bin/bash
while IFS= read -r line; do
wynik=$(coproc timeout 10 wine program.exe "$line" parametry ""; grep -q -m 1 "Fatal error" <&${COPROC[0]}; [[ $COPROC_PID ]] && killall program.exe)
if [[ "$wynik" =~ "MainWindow::start" ]]; then
echo "Dla $line udało się wyświetlić okienko" | tee -a wynik.txt
fi
done < plik.txtAle dziwadło :D
Offline
Teraz wyłapuje "Fatal error" i zabija po 2-ch sekundach ale nie reaguje na "MainWindow::start" co jest dla mnie zdecydowanie ważniejsze.
Offline

Użytkownik


To może zacznijmy od nowa :-)
#!/bin/bash
while IFS= read -r line; do
while read -r output; do
if [[ "$output" =~ "MainWindow::start" ]]; then
echo "Dla $line udało się wyświetlić okienko" | tee -a wynik.txt
elif [[ "$output" =~ "Fatal error" ]]; then
killall program.exe
fi
done < <( timeout 10 wine program.exe "$line" parametry "" )
done < plik.txtOffline
No i teraz działa jak trzeba :) Wielkie dzięki!
Offline
Strony: 1