쉘 명령 출력에서 ​​명령 실행

쉘 명령 출력에서 ​​명령 실행

나는 영원히 실행되고 다른 것에 의해 종료될 때까지 주기적으로 출력하는 명령을 가지고 있으며 tail -f, 새로운 출력이 있을 때마다 다른 명령이 실행되도록 만들고 싶습니다.

지침:

  • 배쉬를 사용할 수 없습니다
  • 이 명령은 분명히 그렇지 않습니다 tail. 단지 다음과 같은 명령을 실행합니다.
  • 이 명령의 출력이 항상 한 줄씩 나타나는 것은 아니며 각 출력 줄에 대해 추가 명령을 실행할 생각도 없습니다.
  • 폴링은 허용 가능한 솔루션이 아닙니다.

답변1

dd다음은 줄 바꿈으로 종료되는지 여부에 관계없이 stdin에서 무언가를 읽을 때마다 실행되는 셸 명령의 예입니다 .

{
   printf not-nl-terminated
   sleep 1
   printf '%s\n' nl-terminated
   sleep 1
   echo
   sleep 1
   printf 'binary\0data'
} | 
while : ; do
   input=$(dd bs=1M count=1 2>/dev/null | tr '\n\0' __)
   [ "$input" ] || break
   printf 'input of size %d\n' "${#input}" 
done

줄게

input of size 17
input of size 14
input of size 1
input of size 11

이 클립의 출처는기준사용 시 이해하는 데 도움이 될 수 있는 동작을 명시적으로 설명하세요 dd.bs=

bs=expr 피연산자가 지정되고 sync, 또는 이외의 noerror변환이 요청되지 않은 경우 notrunc 읽기가 반환되면 각 입력 블록에서 반환된 데이터가 별도의 출력 블록에 기록됩니다.전체 블록 미만변환이 지정되지 않은 경우 sync결과 출력 청크는 입력 청크와 크기가 동일해야 합니다. expr 피연산자가 지정되지 않거나 , 또는 bs= 이외의 변환이 요청되는 경우 입력 끝에 도달할 때까지 입력을 처리하여 전체 크기 출력 블록으로 수집해야 합니다.syncnoerrornotrunc

관련 정보