Linux 如何在后台运行eval spawn ssh和expect?
我创建了一个脚本,使用Linux 如何在后台运行eval spawn ssh和expect?,linux,bash,shell,tcl,expect,Linux,Bash,Shell,Tcl,Expect,我创建了一个脚本,使用ssh进入接入点(AP)并执行一些命令,然后使用expect与shell交互 脚本在前台运行时工作正常,但当我尝试在后台使用&来执行相同的脚本以完成该过程时,它会在下面的ap_commands脚本的spawn ssh命令处停止 正在尝试执行: $ run_ap & Bash脚本(run\u ap)调用expect脚本: #!/bin/sh while(true); do /script/ap_commands done Tcl和expect脚本(ap\u
ssh
进入接入点(AP)并执行一些命令,然后使用expect
与shell交互
脚本在前台运行时工作正常,但当我尝试在后台使用&
来执行相同的脚本以完成该过程时,它会在下面的ap_commands
脚本的spawn ssh
命令处停止
正在尝试执行:
$ run_ap &
Bash脚本(run\u ap
)调用expect脚本:
#!/bin/sh
while(true); do
/script/ap_commands
done
Tcl和expect脚本(ap\u命令
):
更新1-解决方案
多亏了Donal Fellows,我解决了使用screen命令创建新终端并在前台执行脚本的问题
screen -dm bash ./run_ap
我将-f
参数添加到expect
,以强制在前台运行:
#!/usr/bin/expect -f
interact
命令将不适用于后台脚本,因为它明确希望与用户交互(以及spawn
ed子流程);当交互发生时
如果进程不在前台,操作系统会给它一个信号(SIGTSTP),使其停止并等待用户将其设为前台进程。这是通常的Unix终端处理
如果您想使用后台脚本,您需要坚持使用
expect
ing things。interact命令不会与后台脚本一起工作,因为它明确地希望与用户交互(以及spawn
ed子流程);当交互发生时
如果进程不在前台,操作系统会给它一个信号(SIGTSTP),使其停止并等待用户将其设为前台进程。这是通常的Unix终端处理
如果你想使用背景,你需要坚持expect
ing
#!/usr/bin/expect -f