stdout에서 특정 양의 바이트가 반환될 때까지 프로그램을 실행한 다음 종료합니다.

stdout에서 특정 양의 바이트가 반환될 때까지 프로그램을 실행한 다음 종료합니다.

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

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

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

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

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

그러한 프로그램이 있습니까? 아니면 popen()을 사용하여 직접 프로그램을 작성해야 합니까? 또한 프로그램은 takestdin을 실행된 프로그램으로 리디렉션해야 합니다.

참고: 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명령이 완료되도록 연결을 끊습니다. 이것은 당신에게 필요할 수도 있고 아닐 수도 있습니다.

관련 정보