【发布时间】:2011-04-19 19:35:29
【问题描述】:
我正在编写我的第一个期望脚本,所以我可能遗漏了一些明显的东西,但我发现以下内容非常令人费解:
$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$
如果我运行 expect 并让它手动执行某些东西,它就可以工作。如果我将相同的命令放在脚本中,它就不起作用。怎么回事?
【问题讨论】:
我正在编写我的第一个期望脚本,所以我可能遗漏了一些明显的东西,但我发现以下内容非常令人费解:
$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$
如果我运行 expect 并让它手动执行某些东西,它就可以工作。如果我将相同的命令放在脚本中,它就不起作用。怎么回事?
【问题讨论】:
请注意,expect 本质上是 Tcl 的扩展。 Tcl 的exec 执行外部命令,捕获输出并将其作为值返回——它确实不将其发送到 stdout,除非您指示它这样做。但是,交互式 Tcl(或期望)会话将输出打印到标准输出为了方便。
你的脚本应该是:
puts [exec echo a]
# or
set output [exec echo a]
puts $output
我假设“echo a”是更复杂的外部命令的占位符。如果你只是想打印一些东西:
puts "this is something" ;# the Tcl way
send_user "this is too\n" ;# the expect way
如果您对 Tcl 不熟悉并且期望如此,那么您应该首先learn Tcl。
【讨论】: