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.txt
Chciał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
#!/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.txt
Ostatnio 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
#!/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.txt
Offline
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
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.txt
Ale 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
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.txt
Offline
No i teraz działa jak trzeba :) Wielkie dzięki!
Offline
Strony: 1