Shell 预期脚本未正确发送新行
我正在使用expect来响应网络服务。但是,我注意到在Wireshark中,当我执行以下操作时:Shell 预期脚本未正确发送新行,shell,keyboard,newline,expect,Shell,Keyboard,Newline,Expect,我正在使用expect来响应网络服务。但是,我注意到在Wireshark中,当我执行以下操作时: send "mystring\r\n" 它在线路上被转换为: “我的字符串\n” 我尝试过设置stty raw,以及\r、\n的各种组合,以及从expect中发送ASCII代码。Expect似乎正在将这些组合转换为\n。问题是服务器似乎需要\r\n才能接受输入。我能够确定这一点,因为当我在expect中使用“交互”,然后在shell中键入一个^M(control-v enter)时,Wiresha
send "mystring\r\n"
它在线路上被转换为:
“我的字符串\n”
我尝试过设置stty raw
,以及\r
、\n
的各种组合,以及从expect中发送ASCII代码。Expect似乎正在将这些组合转换为\n
。问题是服务器似乎需要\r\n
才能接受输入。我能够确定这一点,因为当我在expect中使用“交互”,然后在shell中键入一个^M
(control-v enter)时,Wireshark会看到一个字符串:
“mystring\r\n”
通过网络发送,服务器正确处理输入。有没有一种方法可以在没有翻译的情况下通过expect正确发送此组合?您是直接执行
stty
还是使用expect
脚本中的set stty_init raw
?(expect
的stty
命令在您的终端上运行,而不是在pty上)。您可能还需要查看-nottyinit
选项以生成啊。。。在我的脚本中,我做到了:stty raw我错过了手册页上的stty_init。我明天就试试看怎么样。谢谢因此,我能够解决这个问题。在生成命令之前,我必须使用设置stty_init raw
。此外,我还必须以十六进制发送\r\n
:发送“mystring\x0d\x0a”
。这就是诀窍。你到底是怎么想出办法来发送十六进制字符的?对我来说也是如此,但肯定有比这更好的解决方案吗?这是可行的,但现在换行不能正确呈现:(