shell脚本中的exception处理?
我正在寻找shell脚本中的exception处理机制。 有没有尝试,在shell脚本中捕获等价的机制?
在bash中没有真正的try/catch
(我假设你正在使用bash),但是你可以使用&&
或者||
来实现一个非常相似的行为。 。
在本例中,如果a_command
失败 (返回非零值), a_command
运行fallback_command
:
a_command || fallback_command
在这个例子中,如果a_command
成功 (返回0),你想执行second_command
:
a_command && second_command
它们可以很容易地通过使用子shell混合在一起,例如,下面的命令将执行a_command
,如果成功则会运行other_command
,但是如果a_command
或other_command
失败,则会执行fallback_command
:
(a_command && other_command) || fallback_command
if / else结构和退出代码可以帮助你伪造一些。 这应该在Bash或Bourne(sh)中工作。
if foo ; then else e=$? # return code from if if [ "${e}" -eq "1"]; then echo "Foo returned exit code 1" elif [ "${e}" -gt "1"]; then echo "Foo returned BAD exit code ${e}" fi fi
这里有两个简单的bashfunctions可以在bash 中进行事件处理 :
你可以像这样使用它来进行基本的exception处理:
onFoo(){ echo "onFoo() called width arg $1!" } foo(){ [[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg" } addListener EXCEPTION_FOO_OCCURED onFoo
在bash中不支持使用try / catch块的exception处理,但是,你可能想试试看支持它的BANGSH框架(它有点像bash中的jquery)。
然而 ,没有级联try / catch-blocks的exception处理类似于事件处理 ,几乎在任何支持数组的语言中都是可能的。
如果你想让你的代码保持整洁(没有if / else的冗长),我会build议使用事件。
MatToufoutu推荐的build议(使用||和&&)不build议用于function,但可以使用简单的命令 。 (请参阅关于风险的BashPitfalls )
{ # command which may fail and give an error } || { # command which should be run instead of the above failing command }