TCL Expect正在向stdout注入一个额外的空字符

gog*_*ors 2 linux tcl expect

似乎expect是在stdout中添加了一个额外的空字符或其他东西.例如:

$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4
Run Code Online (Sandbox Code Playgroud)

什么是这个额外的角色,我该如何摆脱它?

lar*_*sks 5

它不是空字符.您可以使用类似工具xxd查看输出的确切内容expect:

$ expect -c 'spawn -noecho echo xyz; expect eof' | xxd
00000000: 7879 7a0d 0a                             xyz..
Run Code Online (Sandbox Code Playgroud)

这表明您正在获得标准的CR/LF终端终结器.我猜这是因为你的echo进程的stdout 附加到tty设备,这通常涉及额外的过滤来修改行尾字符等等(stty详情请参见参考资料).

您可以通过将tty置于raw模式中来禁用此行为,如下所示:

$ expect -c 'set stty_init raw; spawn -noecho echo xyz; expect eof' |   wc -c
4
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢`od -c`,它更友好一点 (2认同)