我正在寻找一个程序,用于将 stdin 复制到 stdout,同时显示控制字符(如cat -v
),而无需等待 EOF(输入来自tail -f
)。我有 GNU|Linux;cat
安装的会忽略该-u
标志。
答案1
GNUcat
忽略,-u
因为它的输出是始终无缓冲。因此,当您使用 请求无缓冲输出时-u
,您会得到它(但即使您不要求它,您也会得到它)。
GNUtail
具有相同的、始终无缓冲的行为。
为了证明这一点,我在一个 shell 中做了以下操作:
while :; do echo -ne "hello\t"; sleep 1;done > testtail
每秒添加单词 'hello' 和一个制表符(无换行符)
在另一个 shell 中我做了(cat -T
类似于cat -v
——它将制表符显示为 ^I):
tail -f testtail | cat -T
这给了我:
hello^Ihello^Ihello^Ihello^I ...
每秒更新一次。
答案2
BSDcat
的-u
选项禁用了输出缓冲。来自man cat
:
-u Disable output buffering.