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

时间:2016-01-28 15:53:25

标签: linux tcl expect

似乎expect正在向stdout添加一个额外的空字符或其他内容。例如:

$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4

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

1 个答案:

答案 0 :(得分:5)

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

$ expect -c 'spawn -noecho echo xyz; expect eof' | xxd
00000000: 7879 7a0d 0a                             xyz..

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

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

$ expect -c 'set stty_init raw; spawn -noecho echo xyz; expect eof' |   wc -c
4