답변:
나는 거의 똑같은 상황을 고쳤다. 다른 사람들이 아니라면 여전히 도움이되기를 바랍니다. sudo가 아닌 su에서 시작했지만 sudo는 단일 명령을 래핑하기 때문에 su의 종료 코드를 릴레이해야합니다. 그렇지 않은 경우 sudo 레벨에서도 아래 수정 사항을 적용 할 수 있습니다.
언급했듯이 주요 문제는 su가 성공적으로 명령을 실행한다는 것입니다. 기본 조치는 문제없이 완료되었다고보고하여 종료 코드 0을 리턴하는 것입니다. 명령에서 0이 아닌 종료 코드가 예상치 못한 것이거나이를 수행해야한다는 것을 "알지"않습니다. 따라서 해결책은 su가 마지막 명령의 종료 코드를 반환하도록하는 것입니다. 이것은 나를 위해 그것을했다
su <user_x> -c '<bunch_of_commands>; exit $?'
sudo가 잘 재생되지 않는 경우 전체 명령은 다음과 같아야합니다 (이것을 확인하지만 sudo가 설치되어 있지 않습니다)
sudo 'su <user_x> -c \'<bunch_of_commands>; exit $?\'; exit$?'
따옴표가 중첩되어 있는지 확인하고 $를 확인 하시겠습니까? 확장되지 않으므로 큰 따옴표가 없습니다.
이것은 Zsh / Bash / Bourne 쉘에서 작동합니다 :
$ sudo su -m $USER -c "$BASE/bin/shutdown.sh &> /dev/null"
$ echo $?
한 줄로 요청할 때 반환 코드를 사용할 수없는 이유는 확실하지 않지만 둘 이상의 줄을 사용하여 동일한 작업을 수행 할 때 사용할 수 있습니다.
sudo su -m zero2cx -c "/bin/false &> /dev/null"
시스템 사용자 이름으로 시도하십시오 . $?
'1'이어야합니다.
$ USER=appusername
원하는대로 설정으로 작동해야합니다 . 실제 사용자 이름을 사용하지 말고 의도 한 것을 사용하십시오 appusername
. 작동해야합니다.