TCL Expect 正在向标准输出注入一个额外的空字符
TCL Expect is injecting an extra null character to stdout
似乎 expect
正在向标准输出添加额外的空字符或其他内容。例如:
$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4
这个多余的字符是什么,我该如何去掉它?
不是空字符。您可以使用 xxd
之类的工具来准确查看 expect
产生的输出:
$ expect -c 'spawn -noecho echo xyz; expect eof' | xxd
00000000: 7879 7a0d 0a xyz..
这表明您获得了标准的 CR/LF 行尾终止符。我猜这是因为你的 echo
进程的标准输出连接到一个 tty 设备,这通常涉及额外的过滤来修改行尾字符等等(参见 stty
详情)。
您可以通过将 tty 置于 raw
模式来禁用此行为,如下所示:
$ expect -c 'set stty_init raw; spawn -noecho echo xyz; expect eof' | wc -c
4
似乎 expect
正在向标准输出添加额外的空字符或其他内容。例如:
$ expect -c 'spawn -noecho echo xyz; expect eof' | wc -c
5
$ echo xyz | wc -c
4
这个多余的字符是什么,我该如何去掉它?
不是空字符。您可以使用 xxd
之类的工具来准确查看 expect
产生的输出:
$ expect -c 'spawn -noecho echo xyz; expect eof' | xxd
00000000: 7879 7a0d 0a xyz..
这表明您获得了标准的 CR/LF 行尾终止符。我猜这是因为你的 echo
进程的标准输出连接到一个 tty 设备,这通常涉及额外的过滤来修改行尾字符等等(参见 stty
详情)。
您可以通过将 tty 置于 raw
模式来禁用此行为,如下所示:
$ expect -c 'set stty_init raw; spawn -noecho echo xyz; expect eof' | wc -c
4