sed -nの出力をxargsにパイプする方法は?

sed -nの出力をxargsにパイプする方法は?

sedいくつかの出力をにパイプするのに役立ちますxargs。これはうまくいかず、何もエコーされません。

fswatch -xr mysitedir | sed -n '/Updated$/p' | xargs -L1 -I {} echo {}

私の究極の目標は、実際にサイトディレクトリの変更が検出されるたびに私のechoビルドツール()を実行しないことです。このコマンドは、私の場合はデフォルトで互いに置き換えて使用できます。このイベントストリームをフィルタリングします。soupaultfswatchsedgrep

$ fswatch -xr site
/home/jplew/Sites/projects/soupault/site IsDir
/home/jplew/Sites/projects/soupault/site PlatformSpecific
/home/jplew/Sites/projects/soupault/site IsDir
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated
/home/jplew/Sites/projects/soupault/site/blog PlatformSpecific
/home/jplew/Sites/projects/soupault/site/blog IsDir
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated
/home/jplew/Sites/projects/soupault/site/blog PlatformSpecific
/home/jplew/Sites/projects/soupault/site IsDir
/home/jplew/Sites/projects/soupault/site PlatformSpecific
/home/jplew/Sites/projects/soupault/site IsDir
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated

原因:

$ fswatch -xr site | sed -n '/Updated$/p' 
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated
/home/jplew/Sites/projects/soupault/site/blog/index.html Updated

なぜ何も印刷されないのですかxargs

ベストアンサー1

私はここで答えを見つけました。https://stackoverflow.com/a/23030127/1011766

これは長期間実行されるプロセスなので、ストリームをバッファリング解除するにはfswatchsedのフラグを使用する必要があります。-u

-u, --unbuffered

       load minimal amounts of data from the input files and flush the output buffers more often

この簡単な修正はトリックを行います。

fswatch -xr mysitedir | sed -un '/Updated$/p' | xargs -L1 -I {} echo {}


ノート

fswatch私の特定のユースケースに@casが提供するより良い解決策は、組み込みの--eventフラグを使用することです。

fswatch --event Updated -0r mysitedir | xargs -0r -I{} echo {}

おすすめ記事