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 {}