2016-11-26 7 views
2

私はこのようなコマンドを実行しています:パイプ全体のstderrをファイルにリダイレクトする方法は?

mycmd1 | mycmd2 | mycmd3 | lp 

ではなく、各コマンドのためにそれを繰り返すの全体のパイプ用のファイルに標準エラー出力をリダイレクトする方法はありますか?言うことです

、私はむしろこれをやって回避したい:

mycmd1 2>/myfile | mycmd2 2>/myfile | mycmd3 2>/myfile | lp 2>/myfile 

答えて

6

どちらか

{ mycmd1 | mycmd2 | mycmd3 | lp; } 2>> logfile 

または

(mycmd1 | mycmd2 | mycmd3 | lp) 2>> logfile 

が動作します。 (最初のバージョンには、シェルに応じて起動時間がわずかに(〜1ms)あるかもしれません)。

+1

'{...; } 'は、サブシェルを作成しないのでより優れています。 – janos

+1

なぜサブシェルは望ましくないのですか? – springloaded

0

私は次のことを試みたが、動作しているようです:

(mycmd1 | mycmd2 | mycmd3 | lp) 2>>/var/log/mylogfile.log 

私は追加したいので、私は>>を使用毎回上書きするのではなく、ログファイルに保存します。

関連する問題