리디렉션 문서 스크립트에서 종료 코드를 얻는 가장 좋은 방법

리디렉션 문서 스크립트에서 종료 코드를 얻는 가장 좋은 방법
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 )은 셸에서 더 이상 사용되지 않습니까?

관련 정보