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