And*_*ein 16
spawn是expect命令而不是tcl命令.exec是一个tcl命令.
spawn创造一个过程.的过程的输入和输出被连接到期望使用由其他期望命令:send,expect和interact.
exec在tcl下创建一个子进程.通常,tcl将暂停,直到子进程完成.但是,可以在后台创建子进程(使用&作为最后一个参数),如果正确连接输入和输出,tcl可以与子进程交互.这非常笨拙,正是那种期望被设计为顺利处理的互动.
还值得注意的是,某些(很多?)程序在由用户运行时(即在命令行)与从另一个进程运行批处理/运行的一部分时表现不同.实际的区别在于是否有一个终端连接到该进程.
spawn命令是Tcl的Expect扩展的一部分,用于设置执行程序将其自身视为由用户运行,然后添加功能以允许tcl程序以方便的方式与外部程序交互(即匹配)它通过正则表达式输出并分支掉那些匹配).通过spawn运行的东西是异步运行的.
exec命令是一个核心Tcl命令,它运行另一个程序,返回它的输出.它不会执行spawn所做的任何复杂设置,但只是运行程序并查看它的输出(它的返回代码)非常方便.默认情况下,exec运行的东西是同步运行的,但是命令末尾的&符号会使它在后台运行(很像传统的shell脚本).
open命令虽然通常用于读/写文件,但也可用于运行外部进程.通过在命令名前加上管道(|)符号,您可以告诉它运行外部进程,并获得对读/写文件描述符的访问权以与生成的进程进行交互.这是exec和spawn之间的中间地带,与可用的进程有更多的交互,但没有产生复杂的环境设置.它可以非常方便地与需要输入的程序进行交互,但仍然可以很好地设置自动化.