2017-07-31 10 views
0

私はシェルプロセスをいくつか持っています。特定の行の文字列でエラーが発生した場合、それを捕捉する必要があります。だから私はこれをやっている:シェル出力をファイルに書き込む方法

OUTPUT="$(npm run generate_post)" 
echo ${OUTPUT} | grep "_currentUrl" * > error.log 

しかし、私は結果を持っていない誰も助けることができますか?

+0

パイプから入力を読み取っているときに 'grep'の後ろに' * 'があるのはなぜですか? $ {OUTPUT} "をエコーする必要があります。 grep "_currentUrl"> error.log'または単に 'npm run generate_post | grep "_currentUrl"> error.log' – anubhava

答えて

1

まず第一に、あなたの文は意味がありません。

echo ${OUTPUT} | grep "_currentUrl" * 

アスタリスクは、作業ディレクトリ内のファイルに展開し、grepが標準入力から来るものを無視し、そこにパターンを探しています。私は*とあなたが何を意図したか分かりません。

次に、npmのフル出力を後で行う必要があるかどうかを指定しませんでした。あなたは、あなたはあまりにも標準エラー出力をキャプチャするトリプティクによってアドバイスに従うのが賢明かもしれませんが、これは別の話である。もちろん、

npm run generate_post | grep _currentUrl 

を書くことができていないと仮定すると。

npmを完全に出力する必要がある場合は、変数ではなくファイルに入れてください。もちろん、後でどのように使用するかによって異なります。

npm run generate_post | tee npm_output.txt | grep _currentUrl 
+0

ちょっと、うまくいきましたが、このフレーズ "_currentUrl"を含む行をどのように印刷できますか、今はnpmのすべてのデータを持っています... THX – Lukas

+0

??? ?grepコマンドは、文字列_currentUrlを含むSTDOUT行のみを確実に表示します。追加情報が表示されている場合は、このスレッドで繰り返し指摘されているように、STDOUTではなくSTDERRです。 – user1934428

1

npm run generate_postがSTDERRでエラーを出力していると推測しますが、STDOUTをキャプチャしています。上記は STDERRとSTDOUTの両方をキャプチャすることを

OUTPUT="$(npm run generate_post 2>&1)" 
echo ${OUTPUT} | grep "_currentUrl" * > error.log 

注:これを試してみてください。詳細はthis answerをご参照ください。

+0

これは私のerror.logファイルにあります=> 'generate_post.sh:echo $ {OUTPUT} | grep "_currentUrl" *> error.log' :( – Lukas

関連する問題