simple.sh
インターネットからスクリプト出力を取得して終了コードを確認したいです。私はOSXを使用しています
#!/bin/bash
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ -z "$?" ]; then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi
単純.sh:
#!/bin/bash
exit 0
私が経験している問題は次のとおりです。
./test.sh: line 2: #!/bin/bash: No such file or directory
Bad
答え1
[ -z "$?" ]
あなたの考えは正確ですが、戻りコード文字列が次のようになるように戻りコードを確認するために誤った条件を定義したようです。空または。curl
あなたの意志は、出力に関係なく値を渡します。つまり、スクリプトの条件を$?
主張しないという意味です。スクリプトから直接返された戻りコードをif
確認したい場合があります。curl
$(curl -s http://127.0.0.1:8000/simple.sh)
if [ "$?" -eq 0 ]; then
または、演算子を使用せずに、より簡潔に記述して、条件でtest
戻りコードを直接使用できるようにします。if
if curl -s http://127.0.0.1:8000/simple.sh 2>&1 >/dev/null; then
答え2
それはエレガントだとは言えませんが、これが私がする方法です:
#!/bin/bash
curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
rc=$?
if [ -z "$rc" ]
then
echo "Good"
exit 0
else
echo "Bad"
exit 1
fi
私が見るには、あなたのやり方があなたがすることに似ていると思います。$( ... )構造。一度も試したことがなく、bashがこのように動作するかどうかはわかりません。
カールがファイルの内容をエコーするようにし、それをbashにパイプすると、カールコマンドのテキスト出力を解釈し、bashがそれを実行できます。
次のようにしようとすると、同じ結果が得られます。
$( cat /[path]/simple.sh ); echo $?