特定のバイト数が標準出力に返されるまでプログラムを実行し、その後終了します。

特定のバイト数が標準出力に返されるまでプログラムを実行し、その後終了します。

次のようなプログラム/スクリプトがあるとします./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() を使って独自に作成する必要がありますか? プログラムは、take実行されたプログラムに stdin もリダイレクトする必要があります。

注:head -c 5終了しないので、正しい動作は行われません。

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

余談:テイクという名前は、https://reference.wolfram.com/language/ref/Take.htmlリストの最初の n 要素を返すコマンド。

答え1

シェルが Bash の場合は、プロセス置換を使用できます。デモ:

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

これはプロデューサーを強制終了するわけではありませんが、コマンドが完了するようにプロデューサーを切断しますdd。これは必要なことかもしれませんし、そうでないかもしれません。

関連情報