端末にnetcat入力を印刷する

端末にnetcat入力を印刷する

ファイルの内容をキャプチャして次にパイプするスクリプトを作成しようとしていますnc

$cat somefile.txt | nc server port

ファイルの内容は期待どおりにサーバーに送信されますが、端末はサーバーからの応答のみを表示できます。

私が送ったものを見るにはどうすればいいですか?

somefile.txtの各行に異なる応答があり、すべてを1つにまとめたいです。

答え1

teeプロセス置換を使用して活用できます。

$ cat somefile.txt | tee >(nc server port)

teeただコピーしてください入力する両方stdout そして1つの文書。

<()(プロセス置換)を使用すると、ファイルの代わりに書き込みコマンドの入力をbash通知します。bash

答え2

teeプロセス置換を使用して回避できます。

$ ( cat somefile.txt | tee /dev/fd/3 | nc host port ) 3>&1

これの利点は、nc同期的に実行できることです。以下は、非同期プロセス交換動作の例です。

user@hostname $ cat somefile.txt
GET / HTTP/1.0
Host: StackOverflow.com

user@hostname $ cat somefile.txt | tee >(nc stackoverflow.com 80); echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

DONE
user@hostname $ HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]

「DONE」と表示し、出力の途中にヒントを描きます。同期的に実行しても問題ありませんnc

user@hostname $ ( cat somefile.txt | tee /dev/fd/3 | nc stackoverflow.com 80 ) 3>&1; echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
DONE

関連情報