1

我有 2 个命令,我想像这样管道:command1 | command2. 当command1根本不输出任何东西时command2仍然输出。command1 | command2什么都不输出时如何停止 输出command1

具体例子:

function find_string_in_file {
find . -iname "*$1*" | xargs ack-grep "$2"
}
alias findag='find_string_in_file'

如果filename.py当前目录或其子文件夹中不存在,则findag filename.py "some word"仍返回与ack-grep "some word".

4

2 回答 2

4

管道不是有条件的,因此您不能根据先前阶段的退出状态禁用后面的阶段。对于您的特定示例,您可以修改find命令以避免需要管道。

find . -iname "*$1*" -exec ack-grep "$2" '{}' +

如果没有匹配的文件,exec则不会触发测试。

于 2013-02-23T19:50:15.200 回答
1

您可以更改您使用xargs的方式来要求ack-grep按行而不是通过管道读取参数。这将按您的预期工作

find . -iname "*$1*" | xargs -I{} ack-grep "$2" {}
于 2013-02-23T19:51:09.283 回答