提供されたファイルの内容を取得して処理し、結果をstdoutを介して画面に出力するバイナリプログラム*があります。自動化スクリプトの場合、名前付きパイプを使用してこのプログラムにデータを送信し、出力を自分で処理したいと思います。スクリプトを機能させようとした後、名前付きパイプからデータを受け入れるバイナリプログラムに問題があることに気付きました。この問題を説明するために、unixシェルを使用したいくつかのテストの概要を説明しました。
実際のデータファイルを処理することで、プログラムが機能していることを簡単に示すことができます。
$ binprog file.txt > output.txt
これにより、file.txtからの処理済み情報を含むoutput.txtが作成されます。
名前付きパイプ(pipe.txt)は、このデモンストレーションで見られるように機能します。
$ cat pipe.txt > output.txt $ cat file.txt > pipe.txt
これにより、パイプを介して送信された後、file.txtからのデータを含むoutput.txtが作成されます。
バイナリプログラムがファイルではなく名前付きパイプから読み取っている場合、物事は正しく機能しません。
$ binprog pipe.txt > output.txt $ cat file.txt > pipe.txt
この場合、catとbinprogが終了した後でも、output.txtにはデータが含まれていません。topとpsを使用すると、binprogが「実行中」で、作業を行っているように見えます。すべてがエラーなしで実行されます。
この3番目の例でbinprogによって生成された出力がないのはなぜですか?
これを機能させるために私が試みることができるいくつかのことは何ですか?
[*]問題のプログラムはlibsvmのsvm-scaleです。例を一般化して、クリーンでシンプルに保つことにしました。