주어진 종료 코드로 Bash를 종료하는 방법

주어진 종료 코드로 Bash를 종료하는 방법

아래에 0이 인쇄되는 이유는 무엇입니까? 1234가 인쇄될 것으로 예상했습니다.

$ bash -c exit 1234
$ echo $?

답변1

bash -c exit 1234

별도의 인수 및 를 사용하여 bash 를 실행합니다 -c. 바로 다음 인수를 사용하므로 bash는 첫 번째 위치 인수( 쉘 이름) 로만 실행됩니다 .exit1234-cexit1234$0

특정 코드로 bash를 종료하려면 전체 명령을 인용해야 합니다.

bash -c "exit 1234"

Bash 종료 상태는 0-255로 제한되므로 종료 상태는 210(1234% 256)이 됩니다.

답변2

bash단독으로 실행되지 않고 실행되도록 코드를 수정하더라도 의 내장 함수는 자체적으로 값을 8비트로 자르기 때문에 사용할 수 없습니다 .exitexit 1234exitbash

$ 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()

자세한 내용은 다음을 참조하세요.

관련 정보