我在bash脚本之上使用set -e
选项来停止执行任何错误。但我也可以在echo命令上使用-e
,如下所示:
echo -e "Some text".
我有两个问题:
-e
选项在echo
命令中的含义是什么?答案 0 :(得分:3)
"正确"处理bash错误的方法取决于具体情况和你想要完成的事情。
在某些情况下,if
描述的barmar
语句方法是处理问题的最佳方法。
set -e
set -e
将默默地停止脚本。它不会打印任何消息。所以,如果你想知道为什么或什么行导致脚本失败,你会感到沮丧。
此外,正如Greg's FAQ所述,set -e
的行为从一个bash版本到另一个bash版本各不相同,可能会非常令人惊讶。
总之,set -e
的用途有限。
die
函数在其他情况下,当命令失败时,您希望脚本立即退出并显示消息。在perl
中,die
函数提供了一种方便的方法。可以使用函数在shell中模拟此功能:
die () {
echo "ERROR: $*. Aborting." >&2
exit 1
}
然后可以轻松地将对die
的调用附加到必须成功的命令,否则必须停止脚本。例如:
cp file1 dir/ || die "Failed to cp file1 to dir."
这里,由于使用了bash的OR控制运算符||
,die
命令只有在之前的命令失败时才会执行。
答案 1 :(得分:2)
如果您想处理错误而不是在脚本发生时停止,请使用if
:
if ! some_command
then
# Do whatever you want here, for instance...
echo some_command got an error
fi
echo -e
无关。此-e
选项告诉echo
命令在其参数中处理转义序列。有关转义序列列表,请参阅man echo
。
答案 2 :(得分:1)
处理错误的一种方法是在脚本开始时在shebang中使用-e
并使用trap
ERR
处理程序,如下所示:
#!/bin/bash -e
errHandler () {
d=$(date '+%D %T :: ')
echo "$d Error, Exiting..." >&2
# can do more things like print to a log file etc or some cleanup
exit 1
}
trap errHandler ERR
现在,只有在您的脚本中发生错误时,此函数errHandler
才会被称为。