我正在尝试使用以下命令逐行发送文件:
nc host port < textfile
cat textfile | nc host port
我尝试使用 tail 和 head ,但结果相同:整个文件作为唯一行发送。 服务器正在侦听特定守护程序以接收数据日志信息。
我想逐个发送和接收这些行,而不是一次性发送整个文件。
我该怎么做?
答案 0 :(得分:8)
你必须使用netcat吗?
cat textfile > /dev/tcp/HOST/PORT
也可以满足你的目的,至少用bash。
我想一个接一个地发送和接收这些行,而不是一次性发送所有文件。
尝试
while read x; do echo "$x" | nc host port; done < textfile
答案 1 :(得分:3)
OP尚不清楚他们是否需要为每个行添加新连接。但基于OP's comment here,我认为他们的需求与我的不同。但是,谷歌向我们提供了我需要的人,所以我将在这里放置这个替代方案。
我需要通过单个连接来逐行发送文件。基本上,它是一个“慢”cat
。 (这将是许多“会话”协议的常见需求。)
如果我尝试向nc
发送电子邮件,则会收到错误消息,因为服务器无法与我进行“对话”。
$ cat email_msg.txt | nc localhost 25
554 SMTP synchronization error
现在,如果我在管道中插入slowcat
,我会收到电子邮件。
$ function slowcat(){ while read; do sleep .05; echo "$REPLY"; done; }
$ cat email_msg.txt | slowcat | nc localhost 25
220 et3 ESMTP Exim 4.89 Fri, 27 Oct 2017 06:18:14 +0000
250 et3 Hello localhost [::1]
250 OK
250 Accepted
354 Enter message, ending with "." on a line by itself
250 OK id=1e7xyA-0000m6-VR
221 et3 closing connection
email_msg.txt
看起来像这样:
$ cat email_msg.txt
HELO localhost
MAIL FROM:<system@example.com>
RCPT TO:<bbronosky@example.com>
DATA
From: [IES] <system@example.com>
To: <bbronosky@example.com>
Date: Fri, 27 Oct 2017 06:14:11 +0000
Subject: Test Message
Hi there! This is supposed to be a real email...
Have a good day!
-- System
.
QUIT
答案 2 :(得分:2)
只是在这里猜测,但你可能CR-NL结束了行:
sed $'s/$/\r/' textfile | nc host port
答案 3 :(得分:2)
使用stdbuf -oL调整标准输出流缓冲。如果MODE是&#39; L&#39;相应的流将进行行缓冲:
stdbuf -oL cat textfile | nc host port