bash '읽기'가 상태 1로 종료되는 이유는 무엇입니까?

bash '읽기'가 상태 1로 종료되는 이유는 무엇입니까?

에 대한 답변에서"Bash 스크립트에 SIGHUP이 표시되지 않습니까?", 내 스크립트에는 다음이 있습니다.

while true; do read; done

그리고 대개 이것은 매우 잘 작동합니다. 그러나 (tl;dr) ...다른 것에서 실행하면 read상태 코드 1로 종료됩니다.

왜? 이 문제를 어떻게 처리하고 원하는 동작(트랩을 올바르게 트리거 EXIT)으로 복원할 수 있습니까?


("다른 것"은GNU가 만든다달리기아일랜드의ct_run, 이는erlexec달리기스크립트)

답변1

read매뉴얼 페이지의 문서에 bash따르면

파일 끝이 발생하거나, read시간 초과가 발생하거나(상태가 128보다 큰 경우), 변수 할당 오류가 발생하거나(예: 읽기 전용 변수에 할당) 유효하지 않은 파일 설명자가 없는 한 종료 상태는 0입니다. 인수로 제공됩니다 -u.

귀하의 경우에는 표준 입력이 파일 끝에 도달한 것 같습니다.

허용하는 동안 무기한 기다리려고 하기 때문에 CtrlC다음 접근 방식이 더 나을 수도 있습니다.

while sleep 1; do :; done

이를 통해 I/O 처리와 관련된 예상치 못한 상황을 방지하고 신호에 적시에 반응할 수 있습니다.

관련 정보