我记得在某处读过(后来我忘了在哪里)关于一种很少使用的 bash 管道类型,它可以逐行重定向输出。换句话说,不是在最后重定向一次输出,而是针对每个换行符重定向输出,并多次运行接收进程。我查看了我能找到的所有 bash 文档,但我无法弄清楚这个“管道”是否真的存在。
有没有逐行管道之类的东西?当然,这个任务可以很容易地通过其他方式完成,但我很好奇是否有更优雅的方式。
答案1
我认为您正在寻找 xargs?假设我想在目录中找到所有 .bak 文件并删除它们。
find . -name "*.bak" -type f -print | xargs /bin/rm -f
对于找到的每个文件,它都会通过管道传输结果并删除该文件。
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
答案2
我想你正在考虑这个工具unbuffer
。您可以使用它来禁用当输出通过管道从一个命令发送到另一个命令时发生的缓冲。
使用这样的命令,在缓冲了一个页面之前,您不会看到任何输出:
$ od -c /tmp/fifo | more
您可以按如下方式禁用此自动缓冲:
$ unbuffer od -c /tmp/fifo | more
通常,unbuffer 不从 STDIN 读取。这简化了unbuffer
某些情况下的使用。要unbuffer
在管道中 使用,请使用 -p 标志。
$ process1 | unbuffer -p process2 | process3