2016-10-31 3 views
0

LinuxのBashスクリプトと学習には初めてです。 stderrにERRORが含まれている場合にのみstderrをファイルにリダイレクトすることが可能かどうか疑問に思っています。LinuxのBashスクリプトは、ログにERRORが含まれている場合にのみリダイレクトします

私はHashop Hiveコマンドを実行しています。これをBashスクリプトファイルに入れてプロセスをスケジュールします。 hiveコマンドはたくさんのログを生成し、毎回ログをファイルにリダイレクトしたくないのですが、ログにエラーが含まれている場合は、ログをファイルにリダイレクトしてエラーファイルを誰か。

これを達成する方法を教えてください。事前のおかげで..

よろしく、 Jeeva

+0

[stderrをパイプする方法は?](http://stackoverflow.com/questions/2342826/how-to-pipe-stderr-and-not-stdout) –

+1

@AlexL。それはどのように質問に答えますか?彼は、リダイレクションがコンテンツの条件付きであることを望んでいます。 – Barmar

+0

その質問は、grepを使ってstderrを具体的にパイプする方法を説明しています。そうすれば、Jeeは 'ERROR'のためにgrepする必要があります –

答えて

0

あなたが例えば2

で標準エラー出力ファイル記述子を使用する必要があります。

rm this-file-does-not-exist.txt 
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory 
# to redirect that error to a file you do this 
rm this-file-does-not-exist.txt 2>/tmp/logError.txt 
cat /tmp/logError.txt 
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory 
# if you want to check if the output contains `ERROR` do this 
badcommand | grep "ERROR" 1>/tmp/logError.txt # if greping for "ERROR" was successfull redirect stdout to /tmp/logError.txt 
# the 1 is a file descriptor for stdout 

How to use linux mail command

+1

出力に' ERROR'が含まれているかどうかによって、 – Barmar

+0

質問が間違っています。私はちょうどそれを編集しました –

2

私は理解していれば正しくエラーが発生した場合は、エラーログ全体を というファイルに保存したいエラー検出パターンと一致しない可能性があります)。 がI/Oリダイレクションによって純粋に欲しいものを達成する方法はないと思います。

代わりに、stderrを無条件に自分のファイルにリダイレクトできます。その後、後処理ステップとして を実行すると、そのファイルをgrepして ERRORが表示され、結果に応じてファイル を誰かに郵送するか、削除するかを選択できます。

+0

私はあなたの解釈が理にかなっていると思います。 Python/ruby​​が役に立ちます。 –

関連する問題