在bash中,通过exec、通过进程替换从套接字中读取数据并不';不行,

在bash中,通过exec、通过进程替换从套接字中读取数据并不';不行,,bash,scripting,unix-socket,Bash,Scripting,Unix Socket,问这个我觉得有点傻,但事情是这样的 出于测试目的,我正在尝试在bash中实现一个非常简单的ftp客户机,并认为可以使用exec和进程替换,使用干净的方法从套接字读/写,如下所示 exec 3<> /dev/tcp/$host/$port exec 4< <(dos2unix <&3) exec 5> >(unix2dos >&3) exec 3/dev/tcp/$host/$port 执行器4&3) 然后,我将从fd4读取数据

问这个我觉得有点傻,但事情是这样的

出于测试目的,我正在尝试在bash中实现一个非常简单的ftp客户机,并认为可以使用
exec
和进程替换,使用干净的方法从套接字读/写,如下所示

exec 3<> /dev/tcp/$host/$port
exec 4< <(dos2unix <&3)
exec 5> >(unix2dos >&3)

exec 3/dev/tcp/$host/$port
执行器4<(unix2dos>&3)
然后,我将从
fd4
读取数据,然后写入
fd5
,以便发送命令和接收响应

唉,虽然写东西很有魅力,但阅读并不是这样:
dos2unix
就像在等待永远不会到来的输入。使用任何其他命令代替
dos2unix
显示了相同的行为,但是使用实字符设备代替
/dev/tcp
,例如
/dev/uradom
,工作正常

我是在做一些根本错误的事情,还是问题出在哪里

唉,虽然写作是一种魅力,但阅读并不是:

在大多数linux shell中,默认情况下,命令的标准输出流是行缓冲的。默认情况下,在大多数linux shell中,管道中的标准命令输出流是块缓冲的(最后一个命令除外)


要恢复命令的行缓冲,通常使用
stdbuf-oL
utilitye.

尝试
stdbuf-oL
。或者只是
sed-u
。除此之外,请在那里张贴一条。@KamilCuk您可能是指
stdbuf-o0
?这真的很有帮助,谢谢!你想把它作为一个答案而不仅仅是一个评论吗?