xargs는 stdin 입력이 완료되어 처리를 시작할 수 있는지 어떻게 알 수 있습니까? [복사]

xargs는 stdin 입력이 완료되어 처리를 시작할 수 있는지 어떻게 알 수 있습니까? [복사]

읽고 나서스티븐 키트의 답변, xargs는 입력을 처리하기 전에(예: 인수로 분할) stdin 입력을 받기를 기다립니다.

xargs는 stdin 입력이 완료되어 처리를 시작할 수 있는지 어떻게 알 수 있습니까?

-Estdin 입력의 끝을 지정 하는 데 사용됩니까 ?

그것 없이는 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)를 호출하는 등의 방식으로 xargsstdin의 읽기 오류도 파일 끝으로 처리합니다.

관련 정보