我正在尝试编写一个脚本,在其中捕获文件的内容并将其通过管道传输到nc
:
$cat somefile.txt | nc server port
文件内容按预期发送到服务器,但在终端上我只能看到服务器的响应。
我需要做什么才能看到我发送的内容。
我从 somefile.txt 中得到的每一行都有不同的响应,我希望将所有内容放在一起。
答案1
您可以使用tee
并利用流程替换:
$ cat somefile.txt | tee >(nc server port)
tee
只需复制其输入二者皆是stdout
和一份文件。
使用<()
(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