ファイル間パイプは中間パイプで機能しません。

ファイル間パイプは中間パイプで機能しません。

これにより問題が発生します。

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

これは働きます:

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

問題は、最初のコマンドの出力がファイルに送信されないことです。 2番目のコマンドでは、実際にファイルに転送されます。最初のコマンドが機能しない理由 - 2番目のコマンドと同様に、出力をファイルに送信すると予想しました。 Bunyanコマンドはgrepに似ている必要があり、nodeコマンドの出力をフィルタリングしてマッピングするだけです。

私の編集者は提案されたソリューションが好きではありません。

ここに画像の説明を入力してください。

ベストアンサー1

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

まず、作業順序を確認してみましょう。

これは、nodeコマンドの標準出力と標準エラーを取得してリダイレクトすることを意味します。両方ログファイルに。 (そして変数を引用する必要があります。LOG_FILEにスペースが含まれている場合は中断されます。スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?)

コマンドはバックグラウンドに配置されますが、&実際には関係ありません。

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

おっしゃったコマンドが動作しません。これは、nodeコマンドの標準出力を取得してbunyanコマンドに渡して、標準出力と標準エラーをリダイレクトすることです。bunyan堂々としたログファイルに。

これがうまくいかないと言ったので、興味のあるコマンドの出力がnode標準エラーで送信されることは明らかな結論です。いいえ標準出力。標準エラーもリダイレクトされるように使用または&|使用してください。node ... 2>&1 | ...

&|ポータブルではないのが残念ですが、&>そんな点は気にしないようです。)

おすすめ記事