我试图从我通过网络连接到的设备中获取诊断数据。它提供了一个很好的严格的专有协议,您可以发送一个3或4个字符的请求,并接收一个<~30字符的响应。需要考虑的事项:
我想和netcat一起做这个。基本操作简单:
$ echo STA | netcat <IP> <Port>
123498754STA请求将给出netcat写入stdout的状态词。我也可以这样做:
$ cat | netcat <IP> <Port>
STA # <- typed input
12345678 # written by netcat
STA # <- typed input
12345678 # written by netcat在这里,我可以看到第一个请求花费的时间要长得多:多秒而没有明显的延迟。我想摆脱拖延。于是我的任务开始了:保持netcat打开,!
我不能简单地将一个文件输送到netcat,因为我必须等待响应。所以我试着用FIFO来做这个。我创建了两个(/d/pc2dev和/d/dev2pc),两者都具有rw权限。我可以在此基础上编写一个脚本,如果我能让基础工作的话。这样做是可行的:
#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n'
12345678654 # written by netcat with delay
12345678654 # written by netcat as soon as I send the request on shell 2
12345678654 # ditto
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev(没有tr,响应将被写在另一个上。)
然而,这并不是:
#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n' > /d/dev2pc
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
#### SHELL 3 #############################
$ cat /d/dev2pc
# expecting output here - none comes!写入普通文件也不起作用:
#### SHELL 1 #############################
$ tail -f /d/pc2dev | netcat <IP> <Port> | tr '\r' '\n' > log.txt
#### SHELL 2 #############################
$ echo STA > /d/pc2dev
$ echo STA > /d/pc2dev
$ cat log.txt
# nothing对于FIFO/file的写操作似乎是在某处缓冲的,而对stdout的写操作则是立即完成的。(然而,即使在ctrl+c‘’ing等人身上,这个假设的缓冲输出也不会被写入。)
不管是这样还是别的-我怎么才能让它起作用?
发布于 2019-02-05 09:23:47
尝试将管道输送到tee,而不是重定向输出,man 1 tee,看看会发生什么。
下列方法起作用了
$ tail -f /d/pc2dev | stdbuf -i0 -o0 netcat <IP> <Port> | stdbuf -i0 -o0 tr '\r' '\n' > /d/dev2pc
https://stackoverflow.com/questions/54530973
复制相似问题