2017-11-21 16 views
1

はなぜ入るん:BASHに"mycommand >> file1 >> file2"が両方のファイルに追加されないのはなぜですか?

date >> log >> file 

にのみファイルに日付を追加し、ログには影響しませんか?

+0

それは以下のような、これは、bashの制限ではないことは注目に値します - 「stdoutが」operating-ですシステムレベルのコンストラクトであり、慣例によってあらかじめオープンされているファイル記述子です。ファイル記述子が1つのファイルのみを参照できるというルールはbashの一部ではなく、オペレーティングシステムの設計の一部です。 (その1つのファイルは、もう一方の 'tee'のようなプログラムでFIFOにすることができ、' read'を複数の 'write'に分割しますが、パイプラインの左端にあるプログラムの観点からはstdoutはそれでも1つのファイル)。 –

+0

bashはこのようなFIFO自体の反対側にあることを回避する唯一の方法であり、深刻な副作用があります。ソフトウェアが実際に書き込んでいるものに直接アクセスすることを妨げる(したがって、 TTYに接続されている場合はioctlを実行でき、ファイルに書き込む場合はファイル名の検索や検出ができず、他にも多くの便利な機能にアクセスできなくなります)。 –

答えて

4

stdoutが1つだけあるためです。 Bashでは何度でも何度もstdoutをリダイレクトできますが、各リダイレクトは前のリダイレクトよりも優先され、ユーティリティが実行される前にすべてのリダイレクトが設定されます。

stdinをリダイレクトする場合も同様です。 cat < a < bは、まったく同じ理由でbの内容のみを出力します。 RICIの答えへ追加するには

1

、あなたがteeを使用して、両方のファイルに追加することができます

date | tee -a log file

関連する問題