ファイルの内容をキャプチャして次にパイプするスクリプトを作成しようとしています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