我正在编写我的第一个期望脚本,所以我可能会遗漏一些明显的东西,但我发现以下内容非常令人费解:
$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$
如果我运行expect并手动执行某些操作,它就可以运行。如果我在脚本中放入相同的命令,它就不起作用。发生了什么事?
答案 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。