
sed
いくつかの出力をにパイプするのに役立ちますxargs
。これはうまくいかず、何もエコーされません。
fswatch -xr mysitedir | sed -n '/Updated$/p' | xargs -L1 -I {} echo {}
私の究極の目標は、実際にサイトディレクトリの変更が検出されるたびに私のecho
ビルドツール()を実行しないことです。このコマンドは、私の場合はデフォルトで互いに置き換えて使用できます。このイベントストリームをフィルタリングします。soupault
fswatch
sed
grep
$ 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
これは長期間実行されるプロセスなので、ストリームをバッファリング解除するにはfswatch
sedのフラグを使用する必要があります。-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 {}