이것은 여러 쉘에서 버그처럼 보이며 ksh93 및 zsh에서 예상대로 작동합니다 .
배경:
대부분의 쉘은 메인 쉘 내부에서 while 루프를 실행하는 것으로 보입니다.
로그인하지 않은 쉘로 ^ Z를 입력하면 Bourne Shell 이 전체 쉘을 일시 중단합니다.
bash 는을 일시 중단 sleep
한 다음 while 루프를 떠나 새로운 쉘 프롬프트를 인쇄합니다.
대시 는이 명령을 일시 중지 할 수 없게 만듭니다
ksh93을 사용하면 상황이 매우 다릅니다.
ksh93 은 명령이 처음으로 시작되는 동안 동일하게 수행되지만 sleep
ksh93의 buitin 과 마찬가지로 ksh93에는 while 루프가 기본 쉘을 분기 한 다음 ^ Z를 입력 할 때 일시 중단하는 핸들러가 있습니다.
당신이 경우 경우 ksh93 나중에 유형 fg
의 아동 떨어져 포크 것을 여전히 루프가 계속 실행됩니다.
bash 및 ksh93의 작업 제어 메시지를 비교할 때 주요 차이점이 있습니다.
bash 보고서 :
[1]+ Stopped sleep 1
그러나 ksh93 보고서 :
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh 는 ksh93 과 유사하게 작동합니다
두 쉘 모두 ^ Z를 입력하지 않는 한 단일 프로세스 (주 쉘)와 ^ Z를 입력 한 후 두 개의 쉘 프로세스가 있습니다.
$?
리턴시 이를 정확하게 반영해야 하기 때문에true
그렇지 않습니다true
. 아마. 나는 생각한다.