2012-01-23 11 views
0

私はstdoutの答えとstderrのエラーを返すプログラムを持っています。 残念ながら、プログラムは正常終了してもstderrにテキストを出力して終了します。コマンド展開からstderrをパイプに取り込みます。

コマンド拡張を使用してプログラム出力を変数に格納したいとします。ans = $(prog)2> & 1 | grep -v success

これは機能しません。 2> & 1を括弧内に入れようとしましたが、私は$ ansを疑いましたので、 は成功のテキストを取得します。

アイデア?あなたが唯一の標準エラーストリームから「成功」をフィルタリングする場合

ans=$(prog 2>&1 | grep -v success) 

は、あなたがこのようなものを使用することができます:

答えて

2

わからない、あなたが取得しようとして何が、おそらくこれはあなたのコマンドです

ans=$({ ./foo 3>&2 2>&1 >&3- | grep -v success; } 2>&1) 

そして、念のため、BashFAQ/002で述べたように:

あなたが行うことができない何がでキャプチャstdoutです1つの変数、およびstderrをFDリダイレクトのみを使用して別の変数に追加します。そのためには、一時ファイル(または名前付きパイプ)を使用する必要があります。

+0

これはおそらく私の場合、うまくいくでしょう。しかし、progの結果が "成功"というテキストを返す場合、それは機能しません。 – user1165758

+0

あなたは、可能なプログラムの出力と、あなたが 'ans'変数に入れたいものについて何も言わなかったのです。エラーストリームから '成功'単語を含むすべての行をフィルタリングするだけですか? –

+0

答えを更新しました。あなたの質問が枯渇した場合、その答えを受け入れることができます。 –

関連する問題