cal April 2012 | cat > t | cat < t | more
为什么什么都不显示?为什么不显示
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
|
(匿名管道)将第一个进程的 stdout ( 1
) 与第二个进程的 stdin ( ) 连接起来0
。将输出重定向到文件后,没有任何标准输出,因此没有任何东西可以通过管道传输。此外,cat | cat < file
这并没有什么意义,它有两个输入连接到标准输入(至少在 bash 中,重定向稍后出现,“wins”:echo uiae | cat <somefile
将输出 somefile 的内容)
如果要显示命令的输出,同时将其写入文件,请使用tee
二进制文件。它写入文件,但仍写入标准输出
cal April 2012 | tee t | more
cat t # content of the above `cal` command
因为它首先cat > t
将其所有输出发送到一个名为的文件t
,而不再为管道留下任何内容。
如果您的意图是将其发送到文件并通过more
终端,只需使用:
cal April 2012 | tee t | more
这个| cat < t
结构很奇怪,我什至不确定它是否会起作用。它试图将两个完全不同的东西连接到标准输入,cat
当然这是不必要的。
t
如果当前目录中没有现有文件,这对我有用。我在 Ubuntu Oneiric 上使用 bash。
$ cal April 2012 | cat > t | cat < t | more
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
$ cal April 2012 | cat > t | cat < t | more
$ rm t
$ cal April 2012 | cat > t | cat < t | more
April 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30