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

|(匿名パイプ)1は、最初のプロセスの stdout ( ) と 2 番目のプロセスの stdin ( 0) を接続します。出力をファイルにリダイレクトした後は、stdout が残っていないため、パイプする必要はありません。また、cat | cat < file実際には意味がありません。stdin に接続された 2 つの入力を取得します (少なくとも bash では、リダイレクトが後で行われ、"wins": echo uiae | cat <somefilesomefile のコンテンツが出力されます) 。

コマンドの出力を表示すると同時にファイルに書き込む場合は、teeバイナリを使用します。ファイルに書き込みますが、それでも stdout に書き込みます

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構成は非常に奇妙で、うまくいくかどうかさえわかりません。これは、2つのまったく異なるものをの標準入力に接続しようとしてcatおり、確かに不要です。

于 2012-04-05T13:46:21.663 に答える
0

tこれは、現在のディレクトリに名前が付けられた既存のファイルがない場合に機能します。UbuntuOneiricで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 に答える