Linux 如何将bash expect脚本链接在一起?

Linux 如何将bash expect脚本链接在一起?,linux,bash,expect,Linux,Bash,Expect,伙计们。我正在致力于工作过程的自动化,这涉及到在各种虚拟机上输入无休止的命令。这都是非常简单的东西,但它很耗时,而且容易出现人为错误 我偶然发现了“expect”命令,它们适合我的需要。我有一个脚本如下所示: #!/usr/bin/expect -f spawn ssh root@[server name] expect "such and such" send "thing\n" 这会重复一段时间,最终我完成了对那个虚拟机的工作。我希望脚本做的是输

伙计们。我正在致力于工作过程的自动化,这涉及到在各种虚拟机上输入无休止的命令。这都是非常简单的东西,但它很耗时,而且容易出现人为错误

我偶然发现了“expect”命令,它们适合我的需要。我有一个脚本如下所示:

#!/usr/bin/expect -f

spawn ssh root@[server name]
expect "such and such" 
send "thing\n"
这会重复一段时间,最终我完成了对那个虚拟机的工作。我希望脚本做的是输入一个退出命令,然后在我正在使用的本地终端中开始执行其他命令,如下所示:

... 
expect "last part"
send "exit\n"

expect "something"
send "new commands"
或者:

...
expect "last part"
send "exit\n"

spawn ./newscript.sh
无论出于何种原因,expect似乎忽略了我的最后一个
exit
命令。如果有一种方法可以在一个expect脚本中执行多个派生,或者有一种方法可以将脚本链接在一起,请告诉我。

执行以下操作:

expect "last part"
send "exit\r"
expect eof    ;# allow the spawned process to gracefully exit

system ./newscript.sh
从expect手册:

系统
args

将参数作为输入提供给sh(1),就像它是作为终端的命令键入的一样。Expect将等待shell终止


newscript需要是交互式的,还是只是一个需要运行的脚本?只是另一个需要运行的脚本。理想情况下,所有脚本都不需要用户的输入,所有值都在脚本本身中,没有“bash expect脚本”这样的东西。Expect脚本是用TCL编写的,TCL是一种与bash完全不同的语言。它非常支持多个繁殖。