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

관련 정보