我有 GNU grep 3.3-1(Debian Buster 中的当前版本)。
来自man grep:
退出状态
通常,如果选择了一行,退出状态为 0,如果没有选择任何行,则退出状态为 1,如果发生错误,则退出状态为 2。但是,如果使用
-qor--quiet或--silent选择了一行,即使发生错误,退出状态也是 0。
这与POSIX一致。(-L此处未指定。)
最新版本的完整文档和最新提交中的文档没有关于-L( --files-without-match) 的更多详细信息。
grep -L x <<<x(in bash) 以代码 1 退出。我不确定这是否与文档一致(这里选择的行到底是什么?),但至少这是可以解释的:没有输入文件符合必须没有x.
grep -Lq x <<<x并且grep -L x <<<x >/dev/null都以代码 0 退出。好吧,-q稍微好理解一点,但是为什么 stdout 重定向会影响退出代码?因此,要在抑制输出的同时获得原始退出代码行为,(set -o pipefail; /bin/grep -L x <<<x | cat >/dev/null)需要进行类似的 hack 。这是为什么?
由于 GNU grep 被如此广泛地使用,我不确定这是一个错误grep:我更有可能错过一些东西。或者也许退出代码-L只是不依赖的东西?即使您可以使用像这样的测试运行和源代码来了解当前版本的行为,但这种行为将来可能会发生变化,因为它与当前文档不一致。你怎么认为?
(顺便说一句,除了非 2 退出代码(in )和像(in )这样的边缘情况外,最新提交中的测试似乎没有进行测试。)-Lin-eq-out-infloop-f /dev/nullskip-read
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |