exec没有在expect脚本中工作

时间:2011-04-19 19:35:29

标签: exec tcl expect

我正在编写我的第一个期望脚本,所以我可能会遗漏一些明显的东西,但我发现以下内容非常令人费解:

$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$

如果我运行expect并手动执行某些操作,它就可以运行。如果我在脚本中放入相同的命令,它就不起作用。发生了什么事?

1 个答案:

答案 0 :(得分:5)

请注意,expect实际上是Tcl的扩展。 Tcl的exec执行外部命令,捕获输出并将其作为值返回 - 除非您指示,否则将其发送到stdout它来。但是,交互式 Tcl(或期望)会话将输出打印到stdout 作为方便

您的脚本应该是:

puts [exec echo a]
# or
set output [exec echo a]
puts $output

我假设"回声"是一个更复杂的外部命令的占位符。如果你只想打印一些东西:

puts "this is something"  ;# the Tcl way
send_user "this is too\n" ;# the expect way

如果您不熟悉Tcl,那么您应该先learn Tcl