if [ ! -z "admin_us" ]
then
newgrp admin_us<< END
command=` abc.sh `
END
fi
echo $?
여기서 볼 수 있는 것은 종료 코드가 항상 0이라는 것입니다.abc.sh실패 시 종료 코드를 얻는 더 좋은 방법은 무엇입니까? 마지막 옵션은 임시 파일에 저장하고 외부에서 읽는 것이었습니다.
답변1
heredoc 스크립트는 $?로 종료해야 합니다. 종료 코드로.
예를 들어, 최소한의 작업 예(내 UID가 의 멤버이고 스크립트가 users
필요하지 않다고 가정 abc.sh
)( false
대신
#!/bin/bash
if [ 1 == 1 ]; then
newgrp users << END
command=$(false)
exit $?
END
fi
echo $?
newgrp
참고: 새 셸을 포크해도 상위 셸의 값은 변경되지 않습니다 . $command
다음과 같은 것을 더 원할 수도 있습니다.
if [ ! -z "admin_us" ]; then
command=$(newgrp admin_us <<<'abc.sh')
fi
echo "$?"
echo "$command"
그런데 백틱을 사용하지 마세요. 대신 사용하십시오 $(...)
. 백틱은 더 이상 사용되지 않으며 이전 쉘/스크립트와의 하위 호환성을 위해서만 유지됩니다. 바라보다cmd
백틱(예: *sh )은 셸에서 더 이상 사용되지 않습니까?