if [ ! -z "admin_us" ]
then
newgrp admin_us<< END
command=` abc.sh `
END
fi
echo $?
ここで見ることができるのは、終了コードが常にゼロであることです。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)はシェルで使用されなくなりましたか?