【发布时间】:2016-12-07 04:49:02
【问题描述】:
在 bash -e 选项中,出现错误后停止执行,并且 grep 命令返回非零状态,以防找不到它正在寻找的模式。 我想在 if 语句中使用 grep,比如
#/bin/bash -e
if [[ `grep str /usr/lib/file.txt` -eq 0 ]]
//do something
fi
如果我使用 $?获取最后一条命令的语句,然后在最后一条命令之后停止执行,因为 grep 返回非零状态。 一定有办法做到这一点,需要帮助找到它
【问题讨论】:
-
A checked exit -- 即命令的退出状态,它可以是
if条件或短路操作的一部分,例如&&或||-- 被set -e忽略 -- 如果这不是真的,您将永远无法在启用if语句的情况下使用它! -
您的问题是“如果我使用
$?来获取[the] last 命令的[exit status]”,但您问题中的代码根本没有使用$?。您可能想确保您显示的代码确实代表了您的问题。 -
...也就是说,在决定使用
set -e之前,您应该考虑阅读BashFAQ #105 并了解其注意事项;这个特性是……相当有争议的,并且长期以来一直存在不兼容的变化,试图修补令人惊讶的极端情况,结果是不同版本的 bash 在启用它的情况下可能会有不同的行为。 -
阅读 BashFAQ 非常感谢@CharlesDuffy 的所有指导