82

出力バッファリングなしでシェルコマンドを実行する方法はありますか?

たとえば、hexdump file | ./my_script行ごとではなく、バッファされたチャンクでhexdumpからmy_scriptへの入力のみを渡します。

実際、コマンドをバッファリング解除する方法の一般的な解決策を知りたいですか?

4

5 に答える 5

32

パッケージのコマンドunbufferは、出力バッファリングを無効にします: Ubuntu Manpage: unbuffer - unbuffer outputexpect

使用例:

unbuffer hexdump file | ./my_script
于 2010-08-12T08:50:18.897 に答える
24

AFAIK、醜いハックなしでそれを行うことはできません。パイプへの書き込み(またはパイプからの読み取り)は自動的にフルバッファリングをオンにし、それについては何もできません:-(。「ラインバッファリング」(これは必要なものです)は、端末の読み取り/書き込み時にのみ使用されます。醜いハックはまさに​​これを行います:プログラムを疑似端末に接続し、パイプ内の他のツールがラインバッファリングモードでその端末から読み取り/書き込みを行うようにします。問題全体をここで説明します。

このページには、何をすべきか、つまり、を使用しunbufferたり、いくつかのトリックを引っ張ったりするためのいくつかの提案(前述の「醜いハック」)もありLD_PRELOADます。

于 2010-08-12T08:04:34.373 に答える
21

scriptこのコマンドを使用して、hexdumpラインバッファリングの出力を作成することもできます(パイプではなく、標準出力を端末に書き込んhexdumpでいると思わせる疑似端末で実行されます)。hexdump

# cf. http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe/
stty -echo -onlcr
script -q /dev/null hexdump file | ./my_script         # FreeBSD, Mac OS X
script -q -c "hexdump file" /dev/null | ./my_script    # Linux
stty echo onlcr
于 2013-05-07T15:00:03.520 に答える
0

これを解決するには、grep または egrep の「--line-buffered」オプションを使用する必要があります。他のツールは必要ありません。

于 2021-05-17T06:19:14.750 に答える