リダイレクトドキュメントスクリプトから終了コードを取得する最良の方法

リダイレクトドキュメントスクリプトから終了コードを取得する最良の方法
if [ ! -z "admin_us" ]
then
newgrp admin_us<< END
 command=` abc.sh `
END
fi
echo $?

ここで見ることができるのは、終了コードが常にゼロであることです。abc.sh失敗時に終了コードを取得するより良い方法は何ですか?最後のオプションは、一時ファイルに保存して外部から読み取ることでした。

ベストアンサー1

heredocスクリプトは$?で終了する必要があります。終了コードで。

たとえば、最小限の作業例(私のUIDがのメンバーでスクリプトがusers必要ないと仮定abc.shfalse

#!/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)はシェルで使用されなくなりましたか?

おすすめ記事