linux - 当管道的第一个命令不输出时如何不输出任何内容

标签 linux bash shell pipe

我有 2 个命令,我想像这样通过管道传输:command1 |命令 2。当 command1 根本不输出任何内容时,command2 仍然输出。我该如何停止 命令 1 |当 command1 不输出任何内容时,command2 不输出?

具体例子:

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".

最佳答案

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

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

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

关于linux - 当管道的第一个命令不输出时如何不输出任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15044779/

相关文章:

regex - Bash 正则表达式替换两个不同字符串之间的所有内容

javascript - Electron 按钮配置

c++ - 如何获取(Linux)机器的 IP 地址?

linux - 使用 GNU 汇编程序进行系统调用时出现段错误

linux - 我能够在 Virtualbox 中成功运行此 Ubuntu (linux) 设置吗?

linux - Netbeans 7.1 内置终端命令

linux - 如何进入每个子目录并列出文件并将目录名称提供给输出

bash - 使用 tee 将标准输出加载到一行中的变量中

android - 无需 root 即可永久增加 Android 中的文件描述符 ulimit

linux - 从另一个脚本停止正在运行的 bash 脚本