아래에 0이 인쇄되는 이유는 무엇입니까? 1234가 인쇄될 것으로 예상했습니다.
$ bash -c exit 1234
$ echo $?
답변1
bash -c exit 1234
별도의 인수 및 를 사용하여 bash 를 실행합니다 -c
. 바로 다음 인수를 사용하므로 bash는 첫 번째 위치 인수( 쉘 이름) 로만 실행됩니다 .exit
1234
-c
exit
1234
$0
특정 코드로 bash를 종료하려면 전체 명령을 인용해야 합니다.
bash -c "exit 1234"
Bash 종료 상태는 0-255로 제한되므로 종료 상태는 210(1234% 256)이 됩니다.
답변2
bash
단독으로 실행되지 않고 실행되도록 코드를 수정하더라도 의 내장 함수는 자체적으로 값을 8비트로 자르기 때문에 사용할 수 없습니다 .exit
exit 1234
exit
bash
$ strace -e exit_group bash -c 'exit 1234'
exit_group(210) = ?
동일한 프로세스에서 어떤 값으로든 종료할 수 있는 다른 명령을 실행해야 합니다.
$ strace -e exit_group bash -c 'exec perl -e "exit 1234"'
exit_group(1234) = ?
$ strace -e exit_group bash -c 'exec zsh -c "exit 1234"'
exit_group(1234) = ?
그럼에도 불구하고 일부 시스템(예: Linux)에서는 종료 상태 를 자르지 않는 API 또는 POSIX 필수 waitid()
SIGCHLD 핸들러를 사용하더라도 상위 프로세스가 해당 종료 상태의 전체 값에 액세스하는 것을 허용하지 않습니다.sigaction()
자세한 내용은 다음을 참조하세요.