읽고 나서스티븐 키트의 답변, xargs는 입력을 처리하기 전에(예: 인수로 분할) stdin 입력을 받기를 기다립니다.
xargs는 stdin 입력이 완료되어 처리를 시작할 수 있는지 어떻게 알 수 있습니까?
-E
stdin 입력의 끝을 지정 하는 데 사용됩니까 ?
그것 없이는 xargs가 언제 완료되었는지 어떻게 알 수 있습니까? 시간 초과가 있나요?
답변1
입력을 읽으려면 xargs
다음을 사용하십시오 .read
기능(또한 참조해당 Linux 맨페이지).
read
파일 설명자에서 사용 가능한 다음 데이터를 호출 프로그램이 지정한 메모리 영역으로 읽어옵니다. 사용된 대로 xargs
데이터 read
를 사용할 수 있을 때까지 기다리거나, 오류가 발생하거나, 더 이상 사용할 수 있는 데이터가 없다고 판단될 때까지 기다립니다. 각 경우에 각각 양의 정수, -1 또는 0을 반환합니다.
-a
입력(표준 입력 또는 옵션으로 지정된 입력 ) 읽기가 언제 완료되었는지 확인하려면 xargs
지정된 파일 끝 표시( -E
해당 옵션이 사용된 경우)를 찾거나 read
.
다음을 실행하여 실제로 이를 확인할 수 있습니다.
printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x
답변2
xargs는 stdin 입력이 완료되어 처리를 시작할 수 있는지 어떻게 알 수 있습니까?
xargs
하다아니요처리를 시작하기 전에 stdin이 완료될 때까지 기다리십시오.
$ while date +%H:%S; do sleep 1; done | xargs -n2 echo
16:51 16:52
16:53 16:54
16:55 16:56
16:57 16:58
^C
xargs
다른 프로그램과 마찬가지로 표준 입력이 종료되었음을 알고 있습니다. cat(1) 또는 tee(1)은 read(2)의 반환 값을 확인하고 feof(3)를 호출하는 등의 방식으로 xargs
stdin의 읽기 오류도 파일 끝으로 처리합니다.