如何让我的shell脚本回显它调用的脚本失败了?
#!/bin/sh
test="/Applications/test.sh"
sh $test
exit 0
exit 1发布于 2013-02-26 07:53:02
我通常采取以下方法:
#!/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-26 07:47:20
#!/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。
如你所见,我们直接使用boolean expression,不需要测试特殊变量$?。
发布于 2013-02-26 07:56:48
就最佳实践而言,您不应该这样做。如果脚本失败,它应该在终止之前发出一条错误消息,这样它的父脚本就不必终止了。这样做的主要原因是,进程知道它失败的原因,而父进程只能猜测。换句话说,你应该这样写:
#!/bin/sh
test="/Applications/test.sh"
sh $test尽管实际上,更典型的做法是这样写:
#!/bin/sh
/Applications/test.shtest.sh将发出必要的错误消息,并且您的脚本将返回与test.sh相同的值。而且,在当前形式下,即使test.sh实际上失败了,您的脚本也总是成功的,因为exit 0; exit 1是毫无意义的:exit 1永远不会被调用。
https://stackoverflow.com/questions/15078737
复制相似问题