任何人都可以提出下面的函数 test 的更短实现(打印相同的错误消息并具有相同的退出状态)?
function test
{
some-command
exit_status=$?
if [ $exit_status -ne 0 ]; then
echo "some-command failed with exit status $exit_status" >&2
fi
return $exit_status
}
答案 0 :(得分:1)
some-command || echo "some-command failed with exit status $?" >&2
如果要捕获并返回退出状态,请执行
function test {
some-command || r=$? && echo "some-command failed with exit status $r" >&2 && return $r
}
答案 1 :(得分:1)
如果命令成功,则立即返回。然后,如果你还没有回来,你知道有一个错误。这消除了对if
语句的需要。
function newTest {
some-command && return 0
exit_status=$?
echo "some-command failed with exit status $exit_status" >&2
return $exit_status
}
答案 2 :(得分:0)
我的解决方案:
#!/bin/bash
test () {
"$@" || eval "echo '$1 failed with exit status $?' >&2; exit $?"
}
希望这有助于=)
答案 3 :(得分:0)
如果你对错误记录的内容并不总是挑剔,并且总是在错误时终止脚本,那么实现你需要的防弹方式就是
set -e
添加到脚本的最开头。
来自"帮助设置":
-e Exit immediately if a command exits with a non-zero status.