2

如何让我的 shell 脚本向我回显它调用的脚本失败了?

#!/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将发出必要的错误消息,并且您的脚本将返回与 did 相同的值test.sh。此外,在当前形式下,您的脚本将始终成功,即使test.sh实际上失败了,因为exit 0; exit 1这毫无意义:exit 1永远不会调用。

于 2013-02-25T23:56:47.907 回答