timeout 0.6s $(tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers")
따라서 시간 초과가 예상대로 작동하지 않습니다. tail에 일치하는 항목이 없으면 0.6초 후에 취소하고, 일치하는 항목이 발견되었지만 종료 상태가 되기 위해 시간이 초과되면 계속하고 싶습니다. 대신 $(tail...) 부분은 현재 이 이후에만 계속됩니다. 일치하는 항목이 발견되면 포인트를 지정합니다.
Echo $?가 종료 코드를 찾지 못했습니다. 시간 초과를 제어할 수 없는 것 같습니다.
나는 또한 꼬리를 $( )로 묶지 않으려고 노력했지만 결과는 더 나빴습니다. 내가 여기서 무엇을 놓치고 있는 걸까요? 더 나은 해결책이 있습니까?
해결책:
@lukemassa
도움을 주셔서 감사합니다 . 작업 결과는 다음과 같습니다.
timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered -E -- "detail: $KeyNumbers"
그들의 게시물은 이에 대해 설명하고 첫 번째 명령이 -q(본질적으로 출력 억제)인 경우 두 번째 grep 명령의 요점에 대한 의견에서 제기된 질문을 통해 스크립트에서 이전과 동일한 작업을 수행하지 않는다는 것을 깨달았습니다. 이는 다른 요소와 결합됩니다.
답변1
$()
쉘은 내용을 평가하므로 다음과 같습니다.
timeout 0.6s "stuff from the file"
그런 다음 실행을 시도하고 실패합니다.
시도해 보셨나요:
timeout 0.6s tail -f ./file.txt | grep -qA2 --line-buffered "detail: " | grep -E -- "$KeyNumbers"