web-dev-qa-db-ja.com

すべての出力をファイルにリダイレクト

Linuxでは、画面からの出力をファイルにリダイレクトするために、>またはteeのどちらかを使用できることを私は知っています。しかし、出力の一部がまだ画面に出力され、ファイルに書き込まれないのはよくわかりません。

すべての出力をファイルにリダイレクトする方法はありますか?

682
Rayne

その部分は標準エラー出力に書き込まれます、それをリダイレクトするために2>を使用してください。例えば:

foo > stdout.txt 2> stderr.txt

または同じファイルに入れたい場合は:

foo > allout.txt 2>&1

注:これは(ba)shで機能します。適切な構文についてはシェルを確認してください。

1084
Op De Cirkel

すべてのPOSIXオペレーティングシステム には3つのストリーム があります。stdin、stdout、およびstderrです。 stdinは入力で、stdoutまたはstderrを受け入れることができます。 stdoutはプライマリ出力で、これは>>>、または|でリダイレクトされます。 stderrはエラー出力であり、例外がコマンドに渡されたりファイルに書き込まれたりしないように別々に処理されます。通常、標準出力がリダイレクトされている場合でも、これは何らかのログに送信されるか、直接ダンプされます。両方を同じ場所にリダイレクトするには、次のようにします。

command &> /some/file

EDIT:上記の解決策は移植性がないことを指摘してくれたZackに感謝します - 代わりに使ってください:

*command* > file 2>&1 

エラーを黙らせるには、次のようにします。

*command* 2> /dev/null
138
Bryan Agee

たとえば、コンソール上の出力とファイルfile.txtの出力を取得します。

make 2>&1 | tee file.txt

注:(&内の)2>&1は、1がファイル名ではなくファイル記述子であることを指定します。

78
Sagar Jain

これを使う - "require command here" > log_file_name 2>&1

Unix/Linuxにおけるリダイレクト演算子の詳細な説明

>演算子は通常、出力をファイルにリダイレクトしますが、デバイスに送信することもできます。追加するには>>を使用することもできます。

数値を指定しなければ、標準出力ストリームが想定されますが、エラーをリダイレクトすることもできます。

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/ dev/nullは、必要な入力を受け取ってそれを破棄するnullデバイスです。任意の出力を抑制するために使用できます。

43
Indrajeet Gour

Osexp2003およびj.aに対するクレジット…


置く代わりに

&>> your_file.log

行の後ろに

crontab -e

私が使う

#!/bin/bash
exec &>> your_file.log
…

bASHスクリプトの始めに。

利点:スクリプト内にログ定義があります。 Gitなどに適しています.

27
qräbnö

それは標準エラーかもしれません。あなたはそれをリダイレクトすることができます:

... > out.txt 2>&1
15
Petar Ivanov

コマンド:

foo >> output.txt 2>&1

output.txtファイルに追加します。内容は置き換えられません。

15
ellockie

execコマンドを使用して、後ですべてのコマンドのすべてのstdout/stderr出力をリダイレクトできます。

サンプルスクリプト

exec 2> your_file2 > your_file1
your other commands.....
14
osexp2003

追加するには>>を使用してください。

command >> file

7
khushi muhammad