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
答案 0 :(得分:5)
|
(匿名管道)将第一个进程的stdout(1
)与第二个进程的stdin(0
)连接起来。将输出重定向到文件后,没有stdout,所以没有什么可以管道。此外,cat | cat < file
没有意义,它有两个输入连接到stdin(至少使用bash,重定向稍后出现并且“wins”:echo uiae | cat <somefile
将输出somefile的内容)
如果要显示命令的输出,同时将其写入文件,请使用tee
二进制文件。它写入文件,但仍写入stdout
cal April 2012 | tee t | more
cat t # content of the above `cal` command
答案 1 :(得分:1)
因为第一个cat > t
将其所有输出发送到名为t
的文件,所以不再为管道留下任何内容。
如果您打算将其发送到文件并通过more
发送到终端,请使用:
cal April 2012 | tee t | more
这个| cat < t
构造非常奇怪,我甚至不确定它是否会起作用。它试图将两个完全不同的事物连接到cat
的标准输入,当然不必要。
答案 2 :(得分:0)
如果当前目录中没有名为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