単純なHTTP GETリクエストとレスポンスの追跡中にnc
奇妙なことが見つかりました。
たとえば、これはうまくいきます。in
ファイルには最終的にHTTP GET要求とout
ファイル応答が含まれます。
$ mkfifo p
$ (nc -l 4000 < p | tee in | nc web-server 80 | tee out p)&
[1] 8299
$ echo "GET /sample" | nc localhost 4000
This is contents of /sample...
$ cat out
This is contents of /sample...
$
ただし、tee out p
上記を変更するとtee out >p
ファイルout
が空になります。
$ (nc -l 4000 < p | tee in | nc web-server 80 | tee out > p)&
[1] 8312
$ echo "GET /sample" | nc localhost 4000
$ cat out
$
なぜですか?
編集する:私はRHEL 5.3(Tikanga)を使用しています。
ベストアンサー1
問題は、同じファイルを読み書きするためにシェルリダイレクトを使用していることです。後で確認するとp
空になります。シェルはファイルを読み取りモードで開き、ファイルを切り取り、コマンドを実行する前にパイプを設定します。ただし、を使用するとtee
ファイル自体が開き、入力を読み取る前にファイルが切り捨てられません。これはよく知られており、文書化された動作であり、単にリダイレクトを使用してファイルをインラインに変更できない理由です。