作者:帆侮听我悄悄说星星 | 2023-09-01 20:02
假设shell脚本(/ bin/sh或/ bin/bash)包含多个命令.如果任何命令的退出状态失败,如何干净地使脚本终止?显然,可以使用if块和/或回调,但是有更清晰,更简洁的方法吗?使用&&也不是一个选项,因为命令可能很长,或者脚本可能有非常重要的东西,如循环和条件.
1> mat..:
随着标准sh
和bash
,你可以
set -e
它会
$ help set
...
-e Exit immediately if a command exits with a non-zero status.
它也适用于(我可以收集的)zsh
.它也适用于任何Bourne shell后代.
使用csh
/ tcsh
,您必须使用启动脚本#!/bin/csh -e
请注意,条件语句中的命令可能会失败而不会导致脚本退出 - 这是至关重要的.例如:if grep something/some/where; 然后:它被发现; 别的:没找到; fi工作正常,无论是否在/ some/where中找到了什么.
2> Barun..:
可能你可以使用:
$ || exit 1
实时和学习:Bash具有命令分组功能,因此不需要我提到的"eval"技巧.相反,使用`
|| {echo"请确保..."1>&2; 出口; }`(注意关闭之前所需的`;``).
此模式可用于**在个别命令失败时有选择地退出**,并且**如果您要先打印自定义错误消息**。要执行后者,请使用类似<< any_command> ||的方法。eval'echo“请确保...” 1>&2; 退出1”注:必须使用“ eval”技巧才能将“ echo”和“ exit”命令组合在一起而不创建_sub_-shell;使用子外壳(如果使用括号会发生这种情况)将使“退出”无效。