표준 출력이 특정 바이트 수를 반환할 때까지 프로그램을 실행한 다음 종료합니다.

표준 출력이 특정 바이트 수를 반환할 때까지 프로그램을 실행한 다음 종료합니다.

다음과 같은 프로그램/스크립트가 있다고 상상해 보세요 ./generate-infinite-byte-stream.

#!/bin/bash
echo -n 'hello'
sleep infinity

무한 절전 명령은 내가 관심이 없는 무한한 미래에 더 많은 데이터를 전달할 수도 있고 그렇지 않을 수도 있는 네트워크 연결을 나타냅니다.

take 5나는 stdout에서 5바이트를 출력할 때까지 실행된 ./generate-infinite-byte-stream다음 종료하는 프로그램을 원합니다 .

take 5 ./generate-infinite-byte-stream
# gives 'hello' and returns with exit code 0

그러한 프로그램이 있습니까? 아니면 내 프로그램을 실행하려면 popen()을 사용해야 합니까? 또한 프로그램은 take표준 입력을 실행 프로그램으로 리디렉션해야 합니다.

참고: head -c 5종료되지 않으므로 올바른 작업을 수행하지 않습니다.

./generate-infinite-byte-stream | head -c 5
# this returns 'hello', but never terminates

내레이터: Take라는 이름은 다음에서 영감을 받았습니다.https://reference.wolfram.com/언어/ref/Take.html목록의 처음 n개 요소를 반환하는 명령입니다.

답변1

쉘이 Bash인 경우 프로세스 대체를 사용할 수 있습니다. 데모:

dd bs=1 count=5 < <(printf hello; sleep infinity)

이렇게 하면 생산자가 종료되지는 않지만 명령이 dd완료될 수 있도록 연결이 끊어집니다. 이것은 당신에게 필요할 수도 있고 아닐 수도 있습니다.

관련 정보