나는 이 해결책을 찾았습니다: https://stackoverflow.com/questions/7178888/grep-q-not-exiting-with-tail-f
하지만 다른 가능성도 있나요?
UPD: 하고 싶지만 tail -f | grep -q something && echo 'found!'
tail -f가 파이프가 닫히는 것을 방지하여 echo
명령이 실행될 기회가 없기 때문에 작동하지 않습니다.
답변1
그렇게 하는 데 따른 책임은 본인에게 있습니다.
tail -n 0 -f /tmp/bar | { grep -q -m1 zoo && echo found ; pkill -P $$ '^tail$' ; }
pkill
일치 항목이 마지막 줄에 있는 경우 이 명령이 필요합니다. 그러나 tail
동일한 상위 프로세스가 있는 경우 백그라운드에서 다른 프로세스를 종료할 수 있습니다.
답변2
나는 당신이 grep
's -q
또는 -m
옵션을 사용하고 싶어한다고 믿습니다. 실제로 일치하는 줄을 보려면 를 사용하세요 -m1
. 그러면 해당 줄이 인쇄되고 종료됩니다( a 를 보내면 SIGPIPE
종료 tail
됩니다). 해당 줄을 보고 싶지 않으면 를 사용하면 -q
첫 번째 항목을 찾을 때 종료됩니다.