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