最后在shell中编写try catch

问题描述 投票:51回答:3

有没有像linux try catch一样的linux bash命令?或者linux shell总是继续?

try {
   `executeCommandWhichCanFail`
   mv output
} catch {
    mv log
} finally {
    rm tmp
}
shell syntax try-catch finally
3个回答
86
投票

好吧,有点:

{ # your 'try' block
    executeCommandWhichCanFail &&
    mv output
} || { # your 'catch' block
    mv log
}

 rm tmp # finally: this will always happen

78
投票

根据您的示例,无论脚本如何退出,您似乎都在尝试执行类似于始终删除临时文件的操作。在Bash中这样做尝试使用trap内置命令来捕获EXIT信号。

#!/bin/bash

trap 'rm tmp' EXIT

if executeCommandWhichCanFail; then
    mv output
else
    mv log
    exit 1 #Exit with failure
fi

exit 0 #Exit with success

rm tmp中的trap语句总是在脚本退出时执行,因此文件“tmp”将始终尝试删除。

安装的陷阱也可以重置;仅使用信号名称调用陷阱将重置信号处理程序。

trap EXIT

有关更多详细信息,请参阅bash手册页:man bash


1
投票

mv有两个参数,所以你可能真的想要输出文件的内容:

echo `{ execCommand && cat output ; } || cat log`
rm -f tmp
© www.soinside.com 2019 - 2024. All rights reserved.