プロセス戻り値と数量の比較

プロセス戻り値と数量の比較

val.py負の数を返すPythonスクリプトがあります。

import sys
sys.exit(-1234)

このbashスクリプトを実行すると、$?戻り値は46(-1234ではありません)です。$? == 46と値を比較しようとしても$? == "46"まったく機能しません。

python val.py
echo $?

if [ $? == 46 ]; then
    echo "Match"
else
    echo "NO"
fi
  • Q1:戻り値が正しく保存されないのはなぜですか$?
  • Q2:なぜ$ですか? ==数値比較は機能しませんか?

答え1

exit()プロセスに渡されるステータスはシングルバイトでマスクされるため、範囲に制限されます[0-255]。よりexit文書:

ステータス値は、0、EXIT_SUCCESS、EXIT_FAILURE、またはその他の値にすることができます。待機中の親プロセスでは、最下位8ビット(ステータスと0377など)のみを使用できます。

2 の補数実装では、-1234d == 0x...ffffb2eおよび0x2e == 46d、結果が予想されます。

2番目の質問では、あなたのステートメントはPythonプログラムのif終了状態ではなく終了状態をテストしています。echo $?

努力する:

python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...

関連情報