是否可以强制“expect”“puts”一个没有换行符的空字符串?

问题描述 投票:0回答:1

考虑以下脚本,我将其称为

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

tcl expect
1个回答
0
投票

我做了更多实验,我发现

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
版本似乎被破坏的答案感兴趣。

© www.soinside.com 2019 - 2024. All rights reserved.