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
...