이 문제로 몇 년 동안 버그가 발생했습니다. 올바른 방향으로 조금 이동해 준 질 리아 그레에게 감사드립니다.
내 리눅스 상자에서 질문을 조금만 쉬면 예상대로 종료됩니다.
while true ; do echo "ok"; done | head
그러나 파이프를 추가하면 예상대로 종료 되지 않습니다 .
while true ; do echo "ok" | cat; done | head
그것은 몇 년 동안 나를 좌절시켰다. jilliagre가 작성한 답변을 고려하여 다음과 같은 훌륭한 해결책을 찾았습니다.
while true ; do echo "ok" | cat || exit; done | head
QED ...
글쎄요 좀 더 복잡한 것이 있습니다.
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' || exit
done | head
이것은 제대로 작동하지 않습니다. 나는 || exit
조기에 종료하는 방법을 알고 있지만 첫 번째 echo
는 일치하지 않으므로 grep
루프가 즉시 종료됩니다. 이 경우 실제로의 종료 상태에 관심이 없습니다 grep
. 내 해결 방법은 다른을 추가하는 것 cat
입니다. 여기에 "tens"라는 이름의 스크립트가 있습니다 :
#!/bin/bash
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' | cat || exit
done
로 실행되면 올바르게 종료됩니다 tens | head
. 하나님 감사합니다.