나는 영원히 실행되고 다른 것에 의해 종료될 때까지 주기적으로 출력하는 명령을 가지고 있으며 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=
이외의 변환이 요청되는 경우 입력 끝에 도달할 때까지 입력을 처리하여 전체 크기 출력 블록으로 수집해야 합니다.sync
noerror
notrunc