2011-04-19 91 views
1

我在写我的第一个expect脚本,所以我可能失去了一些东西很明显,但我发现下面颇令人费解:如果我运行预期,并使其高管东西EXEC不工作在expect脚本

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

手动,它的作品。如果我在脚本中放入相同的命令,它不起作用。这是怎么回事?

回答

5

请注意,期望本质上是Tcl的延伸。 Tcl的exec执行外部命令,捕获输出并将其作为值返回 - 它的确如此,不是发送它到标准输出,除非你指示它。但是,作为便利,Tcl(或期望)会话将输出打印到标准输出

你的脚本应该是:

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

我假设“呼应了”是一个比较复杂的外部命令的占位符。如果你只是想打印的东西:如果你是新来的Tcl

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

以及然后期望你应该learn Tcl第一。

+0

感谢您的解释。你是对的,我也是Tcl的新手。坦率地说,我不想学习如何在Tcl中编程;我只是想解决一个实际问题,并期望听起来像是这个工作的正确工具。也许这种努力更适合superuser.com。 – LaC 2011-04-20 10:30:01

+0

@LaC,我建议学习Tcl(它不需要很长时间),因为它会让你期望的编程*吨更容易。 – 2011-04-20 10:56:33

+0

还有一件事:不要用“”来包装命令。否则,它会失败。至少,它在我的情况下失败了。 – 2012-11-19 06:44:24