如果命令失败,如何退出?[重复]
- 2024-11-05 13:07:00
- admin 原创
- 47
问题描述:
我是 shell 脚本的新手。如果命令失败,我想打印一条消息并退出脚本。我试过:
my_command && (echo 'my_command failed; exit)
但它不起作用。它继续执行脚本中此行后面的指令。我正在使用 Ubuntu 和 bash。
解决方案 1:
尝试:
my_command || { echo 'my_command failed' ; exit 1; }
四个变化:
更改
&&
为||
{ }
代替使用( )
引入
;
之后exit
{
前后空格}
由于您只想在命令失败(以非零值退出)时打印消息并退出,因此您需要一个||
而不是&&
。
cmd1 && cmd2
cmd2
成功时将运行cmd1
(退出值0
)。
cmd1 || cmd2
cmd2
失败时cmd1
(退出值非零)将会运行。
使用( )
会使它们里面的命令在子 shell中运行,并且从那里调用exit
会导致您退出子 shell 而不是原始 shell,因此执行继续在原始 shell 中。
为了克服这种使用{ }
最后两处更改是 bash 所必需的。
解决方案 2:
其他答案已经很好地涵盖了直接问题,但您可能还对使用感兴趣set -e
。这样,任何失败的命令(在if
测试等特定上下文之外)都会导致脚本中止。对于某些脚本,它非常有用。
解决方案 3:
如果您希望脚本中的所有命令都具有这种行为,只需添加
set -e
set -o pipefail
在脚本的开头。这对选项告诉 bash 解释器在命令返回非零退出代码时退出。(有关为什么pipefail
需要它的详细信息,请参阅http://petereisentraut.blogspot.com/2010/11/pipefail.html)
但这不允许您打印退出消息。
解决方案 4:
还要注意,每个命令的退出状态都存储在 shell 变量 $? 中,您可以在运行命令后立即检查。非零状态表示失败:
my_command
if [ $? -eq 0 ]
then
echo "it worked"
else
echo "it failed"
fi
解决方案 5:
Providedmy_command
是规范设计的,即成功时返回 0,这&&
与您想要的完全相反。您想要的||
。
另请注意,(
在 bash 中这对我来说似乎不正确,但我无法从我所在的地方尝试。告诉我。
my_command || {
echo 'my_command failed' ;
exit 1;
}
解决方案 6:
我破解了以下成语:
echo "Generating from IDL..."
idlj -fclient -td java/src echo.idl
if [ $? -ne 0 ]; then { echo "Failed, aborting." ; exit 1; } fi
echo "Compiling classes..."
javac *java
if [ $? -ne 0 ]; then { echo "Failed, aborting." ; exit 1; } fi
echo "Done."
在每个命令前加上一个信息性 echo,在每个命令后加上相同的行
if [ $? -ne 0 ];...
。(当然,如果您愿意,可以编辑该错误消息。)
解决方案 7:
如果您想要保留退出错误状态,并且有一个每行一个命令的可读文件,您也可以使用:
my_command1 || exit
my_command2 || exit
然而,这不会打印任何额外的错误消息。但在某些情况下,失败的命令无论如何都会打印错误。
解决方案 8:
shelltrap
内置命令允许捕获信号和其他有用的条件,包括失败的命令执行(即非零返回状态)。因此,如果您不想明确测试每个命令的返回状态,您可以说,trap "your shell code" ERR
只要命令返回非零状态,shell 代码就会执行。例如:
trap "echo script failed; exit 1" ERR
请注意,与捕获失败命令的其他情况一样,管道需要特殊处理;上述情况不会捕获false | true
。
解决方案 9:
直接使用exit
可能比较棘手,因为脚本可能来自其他地方(例如来自终端)。我更喜欢使用 subshell set -e
(另外错误应该进入 cerr,而不是 cout):
set -e
ERRCODE=0
my_command || ERRCODE=$?
test $ERRCODE == 0 ||
(>&2 echo "My command failed ($ERRCODE)"; exit $ERRCODE)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件