シェルスクリプトが呼び出すスクリプトが失敗したことをシェルスクリプトにエコーさせるにはどうすればよいですか?
#!/bin/sh
test="/Applications/test.sh"
sh $test
exit 0
exit 1
シェルスクリプトが呼び出すスクリプトが失敗したことをシェルスクリプトにエコーさせるにはどうすればよいですか?
#!/bin/sh
test="/Applications/test.sh"
sh $test
exit 0
exit 1
#!/bin/sh
if sh /Applications/test.sh; then
echo "Well done $USER"
exit 0
else
echo "script failed with code [$?]" >&2
exit 1
fi
スクリプトは、/Applications/test.sh
従来のステータスで終了するように適切にコーディングする必要があります。0
それが大丈夫> 0
で失敗した場合。
ご覧のとおり、特別な変数をテストする必要はありません。ブール式を直接$?
使用します。
私は通常、次のアプローチを取ります。
#!/usr/bin/env bash
test="/Applications/test.sh"
sh "${test}"
exit_status=$?
if [[ ${exit_status} ]] ; then
echo "Error: ${test} failed with status ${exit_status}." >&2
else
echo "Success!"
fi
ベストプラクティスの観点から、すべきではありません。スクリプトが失敗した場合、親がそうする必要がないように、スクリプトが終了する前にエラーメッセージを出力する必要があります。これの主な理由は、プロセスが失敗している理由を知っているのに対し、親は推測することしかできないためです。言い換えれば、あなたはただ書くべきです:
#!/bin/sh
test="/Applications/test.sh"
sh $test
実際には、次のように書くのがより一般的です。
#!/bin/sh
/Applications/test.sh
test.sh
は必要なエラーメッセージを出力し、スクリプトはと同じ値を返しますtest.sh
。また、現在の形式では、スクリプトは常に成功します。実際には無意味でtest.sh
あるために失敗した場合でも、は呼び出されません。exit 0; exit 1
exit 1