2

シェルスクリプトが呼び出すスクリプトが失敗したことをシェルスクリプトにエコーさせるにはどうすればよいですか?

#!/bin/sh

test="/Applications/test.sh"

sh $test

exit 0
exit 1
4

3 に答える 3

3
#!/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で失敗した場合。

ご覧のとおり、特別な変数をテストする必要はありません。ブール式を直接$?使用します。

于 2013-02-25T23:47:19.520 に答える
1

私は通常、次のアプローチを取ります。

#!/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
于 2013-02-25T23:53:02.110 に答える
0

ベストプラクティスの観点から、すべきではありません。スクリプトが失敗した場合、親がそうする必要がないように、スクリプトが終了する前にエラーメッセージを出力する必要があります。これの主な理由は、プロセスが失敗している理由を知っているのに対し、親は推測することしかできないためです。言い換えれば、あなたはただ書くべきです:

#!/bin/sh

test="/Applications/test.sh"

sh $test

実際には、次のように書くのがより一般的です。

#!/bin/sh
/Applications/test.sh

test.shは必要なエラーメッセージを出力し、スクリプトはと同じ値を返しますtest.sh。また、現在の形式では、スクリプトは常に成功します。実際には無意味でtest.shあるために失敗した場合でも、は呼び出されません。exit 0; exit 1exit 1

于 2013-02-25T23:56:47.907 に答える