我记得在某处读到过(然后我忘记了在哪里)关于一种很少使用的 bash 管道类型,它可以逐行重定向输出。换句话说,不是在最后重定向一次输出,而是为每个换行符重定向输出,并多次运行接收过程。我已经查看了所有我可以获得的 bash 文档,但我无法弄清楚这个“管道”是否真的存在。
有逐行管道之类的东西吗?当然,这项任务可以通过其他方式轻松完成,但我很好奇是否有更优雅的方式。
我认为您正在寻找 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/
我想你正在考虑这个工具unbuffer
。您可以使用它来禁用当输出通过管道从一个命令发送到另一个命令时发生的缓冲。
使用这样的命令,在缓冲了一个页面之前,您不会看到任何输出:
$ od -c /tmp/fifo | more
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式禁用此自动缓冲:
$ unbuffer od -c /tmp/fifo | more
Run Code Online (Sandbox Code Playgroud)
通常,unbuffer 不从 STDIN 读取。这简化了某些情况下的使用unbuffer
。要unbuffer
在管道中使用,请使用 -p 标志。
$ process1 | unbuffer -p process2 | process3
Run Code Online (Sandbox Code Playgroud)