Shell 预期脚本未正确发送新行

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

我正在使用expect来响应网络服务。但是,我注意到在Wireshark中,当我执行以下操作时:

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”
。这就是诀窍。你到底是怎么想出办法来发送十六进制字符的?对我来说也是如此,但肯定有比这更好的解决方案吗?这是可行的,但现在换行不能正确呈现:(