Linuxスクリプトコマンドで実行されたコマンドの終了コードを取得します。

Linuxスクリプトコマンドで実行されたコマンドの終了コードを取得します。

これはdebian Linux環境で実行されています。

HelloWorld.shという次のサンプルスクリプトがあります。

#!/bin/bash

echo "Hello World"
exit 1

次に、次のコマンドを実行します。

script -c ./HelloWorld.sh foo ; echo $?

$?スクリプトコマンド自体が正常に実行されたため、予想されるゼロを返します。ただし、次のコマンドを実行すると、1になる戻りコードHelloWorld.shが必要です。

bash HelloWorld.sh ; echo $?

マニュアルページを見ると、スクリプトコマンドは何も返さないので、以下も役に立たないことがわかります。

return_code=`script -c ./HelloWorld.sh foo`

私が尋ねたい質問は、終了値を親シェルに送信するなど、スクリプトコマンドのコンテキストで実行したときにHelloWorld.shの戻り値を取得する方法があるかどうかです。そうでなければ何をするのが良いですか?

スクリプトコマンドが利用できない場合の対処方法に対する回答

  1. HelloWorld.shがshm APIを使用して共有メモリに書き込むことを許可する
  2. HelloWorld.shをファイルに書き込む

どちらの方法も共有メモリオブジェクトとファイルを別々に整理する必要があるため、より簡単な解決策があるかどうかを個人的な知識に問い合わせたいと思います。

答え1

スクリプトのマンページ

 -e, --return
         Return the exit code of the child process.  Uses the same format
         as bash termination on signal termination exit code is 128+n.

だからこれはうまくいくはずです

$ script -e -c ./HelloWorld.sh; echo $?
Script started, file is typescript
Hello World
Script done, file is typescript
1

答え2

人間の脚本、

   -e, --return
          Return the exit code of the child process.  Uses the same format
          as bash termination on signal termination exit code is 128+n.

関連情報