考虑以下脚本,我将其称为
PrintNull.tcl
。
puts -nonewline "\0\0\0\0"
如果我使用
tclsh
运行此脚本,它会按预期输出四个空字符:
tclsh PrintNull.tcl | xxd
00000000: 0000 0000
如果我使用
expect
运行此脚本,它不会输出任何内容:
expect -f PrintNull.tcl | xxd
# No output at all
奇怪的是,如果我稍微修改脚本并删除
-nonewline
,tclsh
和 expect
的行为方式相同,但现在它们都有一个额外的换行符:
expect -f PrintNull.tcl | xxd
00000000: 0000 0000 0a .....
tclsh PrintNull.tcl | xxd
00000000: 0000 0000 0a .....
是什么导致了这种行为,是否有可能在处理时强制expect表现得像tcl
puts
?
我做了更多实验,我发现
send
和 send_user
似乎都可以很好地在 expect
中打印空值。
#!/usr/bin/expect
send "\0\0\0\0"
send_user "\0\0\0\0"
输出:
./PrintNull2.exp | xxd
00000000: 0000 0000 0000 0000 ........
我仍然对任何解释为什么
expect
的 puts
版本似乎被破坏的答案感兴趣。