似乎expect是在stdout中添加了一个额外的空字符或其他东西.例如:
$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4
Run Code Online (Sandbox Code Playgroud)
什么是这个额外的角色,我该如何摆脱它?
它不是空字符.您可以使用类似工具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)