BASH-catching<&;3到var

BASH-catching<&;3到var,bash,var,netcat,Bash,Var,Netcat,试图理解如何尝试从 myRcvMsg="$(cat /dev/fd/3)" nc的执行将其置于侦听模式,但它会将其输出写入标准输出,而不是通过网络回显。请参阅,以了解如何将其变成echo服务器 在我的机器上,我必须使用127.0.0.1来获得连接 下一个问题是,您必须确保您的消息没有卡在缓冲区中。当您在&3的输出端等待nc回显某些内容时,nc可能实际上没有看到您的消息。在我的测试中,$(cat&3 回显“已发送消息” 睡眠1 myRcvMsg=$(类别ttt) echo“MSG应已被RCV'd

试图理解如何尝试从

myRcvMsg="$(cat /dev/fd/3)"

nc的执行将其置于侦听模式,但它会将其输出写入标准输出,而不是通过网络回显。请参阅,以了解如何将其变成echo服务器

在我的机器上,我必须使用127.0.0.1来获得连接

下一个问题是,您必须确保您的消息没有卡在缓冲区中。当您在&3的输出端等待nc回显某些内容时,nc可能实际上没有看到您的消息。在我的测试中,
$(cat&3
回显“已发送消息”
睡眠1
myRcvMsg=$(类别ttt)
echo“MSG应已被RCV'd”
echo“这是RCV消息:\”${myRcvMsg}”

有关详细信息,请参阅,其中缓冲问题在3/Buffered Output problem中突出显示。

/proc
是Linux特有的。
/dev/fd/3
应该为
bash
所接受,而不管文件系统实际提供什么。@vanda我使用的是debian,但得到的是cat:/dev/fd/3:没有这样的设备或地址。我需要吗在调用它之前,请以不同的方式初始化它?thx Art。@artvanderlay如果您使用linux,请尝试在脚本中使用
/proc/self/fd/3
。为什么要使用
cat
程序而不是
read
shell内置程序?
myRcvMsg="$(cat /dev/fd/3)"
#!/bin/bash

set -x
echo "Starting Script"
exec nc -p 18000 -l -c "xargs -n1 echo" &
sleep 1                                  # wait for port to open
exec 3<>/dev/tcp/127.0.0.1/18000
cat <&3 >ttt &
sleep 1
echo "MSG to SEND" >&3
echo "MSG has been sent"
sleep 1
myRcvMsg=$(cat ttt)
echo "MSG should have been RCV'd"
echo "This is the RCV msg:\"${myRcvMsg}\""