에 대한 답변에서"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 처리와 관련된 예상치 못한 상황을 방지하고 신호에 적시에 반응할 수 있습니다.