2
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  
4

3 回答 3

5

|(匿名管道)将第一个进程的 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
于 2012-04-05T13:46:49.877 回答
1

因为它首先cat > t将其所有输出发送到一个名为的文件t,而不再为管道留下任何内容。

如果您的意图是将其发送到文件并通过more终端,只需使用:

cal April 2012 | tee t | more

这个| cat < t结构很奇怪,我什至不确定它是否会起作用。它试图将两个完全不同的东西连接到标准输入,cat当然这是不必要的。

于 2012-04-05T13:46:21.663 回答
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
于 2012-04-05T13:46:07.487 回答