exec没有在expect脚本中工作

LaC*_*LaC 1 tcl exec expect

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

$ expect
expect1.1> exec echo a
a
expect1.2>
$ cat > test.exp
exec echo a
$ expect test.exp
$
Run Code Online (Sandbox Code Playgroud)

如果我运行expect并使其手动执行某些操作,它就可以运行.如果我在脚本中放入相同的命令,它就不起作用.这是怎么回事?

gle*_*man 5

请注意,expect实际上是Tcl的扩展.Tcl的exec执行外部命令,捕获输出,并返回它作为一种价值 -它并没有将其发送到标准输出,除非您指示它.但是,为方便起见,交互式 Tcl(或expect)会话将输出打印到stdout .

你的脚本应该是:

puts [exec echo a]
# or
set output [exec echo a]
puts $output
Run Code Online (Sandbox Code Playgroud)

我假设"echo a"是一个占位符,用于更复杂的外部命令.如果你只想打印一些东西:

puts "this is something"  ;# the Tcl way
send_user "this is too\n" ;# the expect way
Run Code Online (Sandbox Code Playgroud)

如果你是Tcl的新手,那么你应该先学习Tcl.