bash - 尾-f 文件1 | perl -pe '$_' > file2 不向 file2 输出任何内容

标签 bash perl buffer

此命令不会向 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 不是终端。为了提高效率,它会一直等到有完整的数据 block 要写入。由于您没有提供更多数据,它不会写入任何内容,直到 tail 退出并且程序可以完成。

您可以 enable autoflushing使用$|++:

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

关于bash - 尾-f 文件1 | perl -pe '$_' > file2 不向 file2 输出任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500770/

相关文章:

bash - 在某些 Bash 自动完成选项的末尾添加空格,但不向其他选项添加空格?

perl - Perl 中的递归搜索?

java - 如何在 jar 归档中调用 perl 脚本?

tcp - 在 tcp 中,每个连接一个接收缓冲区?或者所有连接共享一个缓冲区?

performance - 如何在不使用 echo 的情况下 awk 或 grep 变量?

bash - 我的 Bash 别名不起作用

linux - 按日期和文件名将文件排序到目录

perl - 对于多个数组

iphone - 苹果的AurioTouch2示例代码中的 “Mute”按钮有什么作用?

c - 如何将字符缓冲区中的十六进制地址转换为写入内存