在bash中,通过exec、通过进程替换从套接字中读取数据并不';不行,
问这个我觉得有点傻,但事情是这样的 出于测试目的,我正在尝试在bash中实现一个非常简单的ftp客户机,并认为可以使用在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读取数据
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
?这真的很有帮助,谢谢!你想把它作为一个答案而不仅仅是一个评论吗?