ホームページ  >  記事  >  バックエンド開発  >  シェルコマンドの出力 (stdout、stderr) をバッファリングしないようにするにはどうすればよいですか?

シェルコマンドの出力 (stdout、stderr) をバッファリングしないようにするにはどうすればよいですか?

王林
王林転載
2024-02-06 09:12:101229ブラウズ

如何使任何 shell 命令的输出(stdout、stderr)不缓冲?

質問内容

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

たとえば、hexdump file | ./my_script は、hexdump からの入力を 1 行ずつではなく、バッファリングされたチャンクで my_script に渡すだけです。

コマンドの出力をバッファリングしないようにするための一般的な解決策は何ですか?


正解


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

このページには、unbuffer を使用するか、LD_PRELOAD を使用していくつかのトリックを実行するなど、いくつかの提案 (前述の「醜いハック」) も提供されています。

以上がシェルコマンドの出力 (stdout、stderr) をバッファリングしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。