2017-07-26 18 views
0

私のコマンドが "0"を返さないのはなぜですか?grepの戻り値の使用方法は?

grep 'Unable' check_error_output.txt && echo $? | tail -1 

「echo $?」を削除すると、 check_error_output.txtで末尾に 'Unable'が来たら、それを正しく返します。末尾-1を削除するか、パイプを& &に置き換えると、期待どおりに戻ります。

私には何が欠けていますか?

+0

このシナリオではどのように役立つか分かりませんが、基本的には、自分のコマンドの戻り状況をスクリプトで使用するようにしています。 – jto

+0

ああ私はokを参照してください - あなたはタイトルが少し誤解を招くhahaです:)私はyasのために変更させて – ThisGuyHasTwoThumbs

+0

何をしようとしていますか?ファイルの最後の行で「Unable」の出現を見つけますか? –

答えて

-1

grepと$の前後に角括弧を追加して解決しました。

(grep 'Unable' check_error_output.txt && echo $?) | tail -1 
0

使用プロセスの置換は:

cat <(grep 'Unable' check_error_output.txt) <(echo $?) | tail -1 
+0

これは、OPが達成しようとしているものについて少し肥大しているようです。私は、このシナリオでは、プロセス置換もパイプも必要ではないと信じています。 –

1

次の方法では、パイプやサブシェル

grep -q 'Unable' check_error_output.txt && echo $?

-qフラグを使用せずにやりたいと思っているものを実現します静か/無音を表します。

マニュアルページから:

Quiet;標準出力には何も書き込まないでください。エラーが検出された場合でも、一致するものが見つかると直ちにステータスゼロで終了します。 -sまたは--no-messagesオプションも参照してください。 (-qはPOSIXで指定されています)

"このようなファイルやディレクトリはありません"というエラーは、どちらも引き続き発生しますので、まだフェイルセーフではありません。

それは、戻り値の出力のいずれかのタイプになるので、私が代わりに、以下のアプローチを示唆している:

grep -q 'Unable' check_error_output.txt 2> /dev/null; echo $? 

主な違いは関係なく、それが失敗するか成功するかどうかの、あなたはまだリターンを得るということですコードとエラーメッセージは/ dev/nullに送られます。私がどのように ";" "& &"ではなく、いずれかのタイプの戻り値をエコーし​​ます。

+0

また、私のif文の出力が1であるかどうかを知りたいと思います。上記の@Raman Sailopalへの私のコメントを参照してください。 – jto

+0

私の提案するアプローチの下でコードの2番目のビットはgrepの戻りコードを出力します。 –

+1

エラーを避けるために、 '-s'オプションを使用してください。 – Sundeep

0

if文の任意のコマンドの戻り値を確認する最も簡単な方法は、if cmd; thenです。例:

if grep -q 'Unable' check_error_output.txt; then ... 
関連する問題