バックグラウンドプロセスのsedからコンソール出力リダイレクトは返されません。

バックグラウンドプロセスのsedからコンソール出力リダイレクトは返されません。

私はsedを使用して、コマンドによって提供された各行の先頭に日付を追加します(vlcを使用しても決して停止しません...)。他のstackexchange投稿でこの方法を見つけましたが、期待どおりに機能します。

command | sed "s/^/$(date +%Z-%Y-%m-%d-%T) /" &>> $LOGFILE &

これで、スクリプトファイルのバックグラウンドプロセスとして使用したいと思います。私の問題は、スクリプトがこの行で完了せず、停止しないことです。

よく理解すれば、sedはコマンドの実行中に絶対に完了しませんが、どうせバックグラウンドで実行され、次のステップに進むべきでしょうか?

sed 部分を削除すると、スクリプトは期待どおりに終了します。

Centos 6.4、バージョン4.2.53(1)-リリース(x86_64-redhat-linux-gnu)でGNU bashを実行しています。

ベストアンサー1

コマンドを処理するには、パイプの改行文字を印刷する必要があります。

test1(){ echo "testing-one"; sleep 100; }
test2(){ echo -n "testing-two"; sleep 100; }

test1| sed "s/^/$(date -u +%Z-%Y-%m-%d-%T)/"

テスト中の関数(コマンドエージェントとして機能する)がある場合は、改行文字test1をエクスポートします。使用すると、コマンド自体が完了していなくても(sleep 100)、1行がすぐに発行されます。

test2機能(3行目の編集)を使用している場合、コマンドライン全体が完了するまでこの行はエクスポートされません。

おすすめ記事