当前位置:  开发笔记 > 编程语言 > 正文

Shell脚本:死于任何错误

如何解决《Shell脚本:死于任何错误》经验,为你挑选了2个好方法。

假设shell脚本(/ bin/sh或/ bin/bash)包含多个命令.如果任何命令的退出状态失败,如何干净地使脚本终止?显然,可以使用if块和/或回调,但是有更清晰,更简洁的方法吗?使用&&也不是一个选项,因为命令可能很长,或者脚本可能有非常重要的东西,如循环和条件.



1> mat..:

随着标准shbash,你可以

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;使用子外壳(如果使用括号会发生这种情况)将使“退出”无效。
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有