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
|
(匿名パイプ)1
は、最初のプロセスの stdout ( ) と 2 番目のプロセスの stdin ( 0
) を接続します。出力をファイルにリダイレクトした後は、stdout が残っていないため、パイプする必要はありません。また、cat | cat < file
実際には意味がありません。stdin に接続された 2 つの入力を取得します (少なくとも bash では、リダイレクトが後で行われ、"wins": echo uiae | cat <somefile
somefile のコンテンツが出力されます) 。
コマンドの出力を表示すると同時にファイルに書き込む場合は、tee
バイナリを使用します。ファイルに書き込みますが、それでも stdout に書き込みます
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
構成は非常に奇妙で、うまくいくかどうかさえわかりません。これは、2つのまったく異なるものをの標準入力に接続しようとしてcat
おり、確かに不要です。
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