似乎expect
正在向stdout添加一个额外的空字符或其他内容。例如:
$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4
这个额外的角色是什么?如何摆脱它?
答案 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