我正在学习编写TCL(expect)脚本,发现一些示例使用spawn命令,而另一些示例则使用exec命令。我尝试了谷歌搜索,但找不到它们的区别在哪里?
假设我在一个较长的expect脚本中间调用'exec'命令,我可以期望会发生什么?
spawn
是一个expect
命令,而不是tcl
命令。 exec
是一个tcl
命令。
spawn
创建一个进程,该进程的输入和输出连接到expect,以供其他expect命令使用:如send
、expect
和interact
。
exec
在tcl下创建子进程。通常情况下,tcl会一直挂起,直到子进程完成。然而,如果把最后一个参数设为"&",则可以在后台创建子进程,并且如果正确连接输入和输出,tcl可以与子进程交互。这非常麻烦,正是expect旨在处理的平稳交互类型。
回答这个问题的更简单的方式是改变一下提问方式,询问何时应该使用exec和spawn。 简而言之,对于交互式命令,请使用spawn;对于非交互式命令,请使用exec。