繁体   English   中英

tail -f file1 | perl -pe'$ _'> file2不向file2输出任何内容

[英]tail -f file1 | perl -pe '$_' > file2 does not output anything to file2

此命令不向file2输出任何内容:

#!/bin/bash
echo content > file1
tail -f file1 | perl -pe '$_' > file2

虽然这些命令可以正常工作:

tail -f file1 > file2
tail -f file1 | perl -pe '$_'
tail file1 | perl -pe '$_' > file2
tail -f /tmp/file1 | while read line; do echo $line | perl -pe '$_' > /tmp/file2 ; done

谁知道发生了什么?

perl检测到stdout不是终端。 为了提高效率,它会一直等到要写入完整的数据块。 由于您不提供更多数据,因此在tail退出并且程序可以完成之前不会写任何内容。

您可以使用$|++ 启用autoflushing

tail -f file1 | perl -pe '$|++; $_' > file2

没有输出的那个遭受缓冲输出和非终止的组合。 tail -f永远不会退出,永远等待file1增长。 然而, perl的输出(显然)是缓冲的,所以它等到它有一些最小量的输出(超过一行包含“内容”)来实际写入file2 在生成更多输出或perl退出之前,输出仍保持未刷新状态。

每个工作示例要么终止,要么刷新当时的任何缓冲输出; 或者它的输出是无缓冲的,允许它在生成时显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM