Pythonスクリプトを実行して結果を得るには、小さなシェルスクリプトを作成する必要があります。
この方法で実行しようとすると機能します。
#!/bin/sh
/usr/bin/python /etc/scripts/backup.py
result=$?
if [ $result -gt 0 ];
then echo 'PROBLEM';
else
echo 'OK';
fi
しかし、これをしようとすると失敗します。
#!/bin/sh
if [ $(/usr/bin/python /etc/scripts/backup.py) -gt 0 ];
then echo 'PROBLEM';
else
echo 'OK';
fi
次を返します。
lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK
結果が間違っています。 「OK」の代わりに「PROBLEM」を印刷する必要があります。
私は今まで何を試しましたか
if [ $(/usr/bin/python /etc/scripts/backup.py) -ne 0 ];
返品
lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK
私もこれを試しました:
if [ "$(/usr/bin/python /etc/scripts/backup.py)" -gt 0 ];
次を返します。
lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: out of range
OK
誰もが正しい方向に私を指すことができますか?
ありがとうございます。
ベストアンサー1
$?
このコマンドは標準出力に終了ステータス()を返しません。コマンド置換($(...)
)は標準出力をキャプチャします。
代わりに
#!/bin/sh
if ! /usr/bin/python /etc/scripts/backup.py; then
echo 'PROBLEM'
else
echo 'OK'
fi
PROBLEM
Pythonスクリプトがゼロ以外の終了状態で終了すると、最初のブランチが選択されて印刷されます。
if
これは「スクリプトが成功しなかった場合」と理解できます。
削除したい場合!
:
#!/bin/sh
if /usr/bin/python /etc/scripts/backup.py; then
echo 'OK'
else
echo 'PROBLEM'
fi
if
この文は、「スクリプトが成功した場合」と解釈できます。
これ間違いあなたが得る結果は、スクリプトが何も出力しないという事実に由来します。これは、コマンド置換が空であることを意味します。引用しなかったため、シェルが実行しようとするコマンドは次のとおりです。
if [ -gt 0 ]
構文エラーです。
コマンド置換を引用した場合は、デフォルトで以下を実行しようとします。
if [ "" -gt 0 ]
そして、シェルは空の文字列を整数として比較することはできません。