Linuxでは、画面からの出力をファイルにリダイレクトするために、>
またはtee
のどちらかを使用できることを私は知っています。しかし、出力の一部がまだ画面に出力され、ファイルに書き込まれないのはよくわかりません。
すべての出力をファイルにリダイレクトする方法はありますか?
その部分は標準エラー出力に書き込まれます、それをリダイレクトするために2>
を使用してください。例えば:
foo > stdout.txt 2> stderr.txt
または同じファイルに入れたい場合は:
foo > allout.txt 2>&1
注:これは(ba)shで機能します。適切な構文についてはシェルを確認してください。
すべてのPOSIXオペレーティングシステム には3つのストリーム があります。stdin、stdout、およびstderrです。 stdinは入力で、stdoutまたはstderrを受け入れることができます。 stdoutはプライマリ出力で、これは>
、>>
、または|
でリダイレクトされます。 stderrはエラー出力であり、例外がコマンドに渡されたりファイルに書き込まれたりしないように別々に処理されます。通常、標準出力がリダイレクトされている場合でも、これは何らかのログに送信されるか、直接ダンプされます。両方を同じ場所にリダイレクトするには、次のようにします。
command &> /some/file
EDIT:上記の解決策は移植性がないことを指摘してくれたZackに感謝します - 代わりに使ってください:
*command* > file 2>&1
エラーを黙らせるには、次のようにします。
*command* 2> /dev/null
たとえば、コンソール上の出力とファイルfile.txt
の出力を取得します。
make 2>&1 | tee file.txt
注:(&
内の)2>&1
は、1
がファイル名ではなくファイル記述子であることを指定します。
これを使う - "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デバイスです。任意の出力を抑制するために使用できます。
Osexp2003およびj.aに対するクレジット…
置く代わりに
&>> your_file.log
行の後ろに
crontab -e
私が使う
#!/bin/bash
exec &>> your_file.log
…
bASHスクリプトの始めに。
利点:スクリプト内にログ定義があります。 Gitなどに適しています.
それは標準エラーかもしれません。あなたはそれをリダイレクトすることができます:
... > out.txt 2>&1
コマンド:
foo >> output.txt 2>&1
はをoutput.txtファイルに追加します。内容は置き換えられません。
exec
コマンドを使用して、後ですべてのコマンドのすべてのstdout/stderr出力をリダイレクトできます。
サンプルスクリプト
exec 2> your_file2 > your_file1
your other commands.....
追加するには>>
を使用してください。
command >> file