Mój skrypt Bash 4 wywołuje program innej firmy P
(taki, którego nie mogę ponownie skompilować), który drukuje ostrzeżenia do STDOUT. Kiedy drukuje yikes
, wchodzi również w nieskończoną pętlę. Więc kiedy wykryję a yikes
, jak mogę natychmiast zatrzymać P
i przywrócić kontrolę nad skryptem? (I niech P
normalnie skończy się inaczej.)
Prawdopodobnie przydatne fragmenty:
(echo $BASHPID > /tmp/subpid; ./P | tee /tmp/Pout ) &
tail -f /tmp/Pout | grep -m1 yikes && kill -9 $(cat /tmp/subpid)
wait
sudo apt-get install expect
?Próbny:
Znaleziono z https://stackoverflow.com/a/26779617/2097284 .
Jednak https://unix.stackexchange.com/questions/86270/how-do-you-use-the-command-coproc-in-bash wyjaśnia, dlaczego nazwane potoki są lepsze (chociaż impas nie jest tutaj możliwy), i dlaczego
expect
jest jeszcze lepiej.źródło