我对shell脚本非常陌生,我正在努力去处理pipe道问题。 我可能在这里完全走错了方向
我有一个shell脚本包含一个简单的while循环,在这个循环内,我正在使用netcat监听指定的端口和pipe道input到一个二进制文件,通过stdin等待命令。 这是脚本-A
我有第二个shell脚本接受input作为参数,然后回声这些参数到netcat正在侦听的端口。 这是Script-B
我的目标是通过Netcat将位于Script-A的二进制文件返回到Script-B,以便通过stdout返回。 二进制文件必须被初始化并等待input。
如何find一个string中的子string(或如何grep一个variables)?
如何从脚本中的文件或pipe道中select多行?
这是我的:
脚本-A
while true; do nc -kl 1234 | /binarylocation/ --readargumentsfromstdinflag done
脚本-B
foo=$(echo "$*" | nc localhost 1234) echo "$foo"
通过这个设置,二进制文件的输出是通过Script-A来完成的在做了一些研究之后,我得到了这一点,我试图使用一个命名pipe道来创build一个从二进制文件返回到netcat的循环,它仍然不工作 –
脚本-A
mkfifo foobar while true; do nc -kl 1234 < foobar | /binarylocation/ --readargumentsfromstdinflag > foobar done
脚本B没有改变。
请记住,我的shell脚本经验在大约一天的时间内就会结束,谢谢。
用bash捕获输出和交互式程序的input
如何在LINUX中实现AJAX(interactive)类SEARCH查找文件?
为什么陷阱没有奏效
问题出在你的脚本B中。netcat从STDIN中读取并在STDIN关闭时立即退出,而不是等待响应。
你会意识到,当你这样做:
foo=$( ( echo -e "$*"; sleep 2 ) | nc localhost 1234) echo "$foo"
nc有一个stdin行为的参数。
-q after EOF on stdin,wait the specified number of seconds and then quit. If seconds is negative,wait forever.`
所以你应该这样做:
foo=$( echo -e "$*" | nc -q5 localhost 1234) echo "$foo"