2017-02-03 6 views
-1

コマンド出力または "failed"を同じファイルに書き込むにはどうすればよいですか?私がしようとしているのは以下のようなものですbash「command1 ||エコーが失敗しました」同じファイルに書き込む

command1 || echo failed > myfile.out 

上記のコマンドは期待どおりに動作しません。それは常にmyfile.outへの出力として失敗しました

+2

"(command1 || echo failed)> myfile.out" – Shiping

+3

または{{command1 ||エコーに失敗しました。 }> myfile.out' - 括弧はコマンドをサブシェルで実行するよう強制しますが、中括弧はサブシェルを強制することなくグループ化します。 –

+0

@GordonDavissonによるコメントはおそらくあなたの問題を解決しますが、その質問の将来の読者のためだけに、あなたの期待が何であるかを説明し、コマンドが実際に期待どおりに機能しないものを説明するのは便利です。 – Fred

答えて

0

あなたの質問へのコメントはおそらくあなたの問題を解決しますが、シェル構築に慣れていない人にとっては理解しやすい別の方法を提案したいと思います。他のプログラミング言語での経験があります。

あなたはこのように、関数の中であなたのコマンドを入れて、そのファイルへの関数の出力をリダイレクトすることができます:リダイレクトが機能の全体の出力をキャプチャします

my_function() 
{ 
    command1 || echo failed 
} 

my_function > myfile.out 

。同じファイルへのリダイレクションを含む一連の行を持つ代わりに、出力をまとめて出力するコマンドがたくさんある場合にも便利です。

あなたは標準出力と標準エラー出力(通常は、必ずしも、ステータス/エラーメッセージに使用されていない)の両方をキャプチャしたい場合は、あなたが行うことができます:この行で

my_function > myfile.out 2>&1 

を、2>&1手段」ファイル記述子2(stderr)の出力を取り出し、ファイル記述子1(stdout)が現在どこに行っているかを送信します。最初のものが同じ結果を出す前にこのリダイレクトを置くので、順序は重要です。

関連する問題