web-dev-qa-db-ja.com

ファイルとターミナルへのコマンド出力リダイレクト

コマンド出力をファイルとコンソールにもスローしようとしています。これは、出力の記録をファイルに保持するためです。私は以下を行っていますが、ファイルに追加していますが、端末にls出力を印刷していません。

$ls 2>&1 > /tmp/ls.txt
58
Satish

はい、出力をリダイレクトすると、コンソールには表示されません。 teeを使用します。

ls 2>&1 | tee /tmp/ls.txt
92
Karoly Horvath

2>&1は、標準出力とともに標準エラーもリダイレクトされることを意味することに注意してください。そう

someCommand | tee someFile

ファイルの標準出力のみを提供し、標準エラーは提供しません。標準エラーはコンソールにのみ表示されます。ファイルの標準エラーも取得するには、使用できます

someCommand 2>&1 | tee someFile

(ソース: シェルでは、 "2>&1"?とは何ですか? )。最後に、上記のコマンドは両方ともファイルを切り捨て、クリアを開始します。コマンドのシーケンスを使用する場合、すべてのコマンドの出力とエラーを次々に取得することができます。この場合、-aフラグを使用して「tee」コマンドを実行できます。

someCommand 2>&1 | tee -a someFile
26
Serge Rogatch

誰かが出力を追加する必要があり、オーバーライドしない場合、「tee」コマンドの「-a」または「--append」オプションを使用できます。

ls 2>&1 | tee -a /tmp/ls.txt
ls 2>&1 | tee --append /tmp/ls.txt
11
Farah