stderrとstdoutをスクリプトの同じ行の異なるファイルにリダイレクトする方法は?


180

私はこれだけ知っています:

$ command 2>> error

$ command 1>> output

stderrをエラーファイルに出力し、stdoutをbashの同じ行の出力ファイルに出力する方法はありますか?

回答:


292

1行に追加するだけです command 2>> error 1>> output

ただし、これ>>は、ファイルにすでにデータがある場合に追加するためのものです。一方、>ファイル内の既存のデータは上書きされます。

したがって、command 2> error 1> output追加したくない場合。

ただ、完成のために、あなたは書くことができる1>と同じように>、デフォルトのファイルディスクリプタが出力されますので、。これ1>>同じことです。

だから、にcommand 2> error 1> outputなるcommand 2> error > output


3
正解です。私はあなたがどの1>ように書くことができるかについてのあなたの説明が本当に好きです>
user784637

これはcommand &2>err.logとどのように違うのか、私は完全に混乱している構文だと思います。(すべてのbash pipe-ismsの適切な回答へのリンクが正しい場合があります)
ThorSummoner '19年

4
@ThorSummoner tldp.org/LDP/abs/html/io-redirection.htmlはあなたが探していると思います。Fwiw、command &2>err.log完全に合法ではないようです-その構文のアンパサンドは、ターゲットとしてファイル記述子に使用されますcommand 1>&2。たとえば、stdoutをstderrに再ルーティングします。
DreadPirateShawn 2015

@ DreadPirateShawn、ABSを参照としてリンクしないでください。ABSには時々完全な不正確さが含まれ、非常に頻繁に不正行為の例が含まれています。wiki.bash-hackers.org/howto/redirection_tutorialは、リダイレクトに関するはるかに優れたリファレンスソースです。
Charles Duffy、

27

これを試して:

your_command 2>stderr.log 1>stdout.log

詳しくは

数字0までは、9あるファイルディスクリプタのbashインチ 0標準入力を1表し、標準出力を2表し、標準エラーを表します。3から9他の一時的な使用のための予備です。

演算子を使用して、ファイル記述子をファイルまたは別のファイル記述子にリダイレクトできます>>>代わりに、空のファイルを作成する代わりに、演算子を使用してファイルに追加できます。

使用法:

file_descriptor > filename

file_descriptor > &file_descriptor

Advanced Bash-Scripting Guide:Chapter 20. I / O Redirectionを参照してください。


Thanks.iは一時間のためにこれを検索する
dılosürücü


9

または、出力(stdoutとstderr)を1つのファイルに混在させる場合は、次のように使用できます。

command > merged-output.txt 2>&1

32
これは質問に対する答えではありません。
マティアス

なぜ人々は出力をマージするか、出力のマージを提案するのですか?
nurettin 2018年

@nurettin:コマンドを実行し、出力をログファイルに即座に保存するスクリプト行があるかもしれません。問題のコマンドは時々失敗する可能性があるので、それに関するエラーも保存し、同じログファイルに保存します。
streamofstars

@streamofstarsはい、もちろんあなたは正しいかもしれません。たぶんそれは人々が望んでいることです。私はこの質問のコンテキスト内で、スタックオーバーフロー全体で答えを求めていて無関係なものをたくさん見つけた人としてコメントしていました。
ヌレッティン

0

複数のコマンドの出力をリダイレクトできます。これは、コマンドラインまたはbashスクリプトで最も便利に機能します。-s画面にプロンプトパスワードを指示します。

Hereblockコマンドstdout / stderrは、個別のファイルに送信され、何も表示されません。

sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF

hereblock cmds stdout / stderrは単一のファイルに送信されて表示されます。

sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF

hereblock cmds stdout / stderrは、個別のファイルとstdoutに送信されて表示されます。

sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF

あなたが誰であるか(whoami)とユーザー名に応じて、パスワードが必要な場合と必要でない場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.