如何 运行 在后台评估 spawn ssh 和 expect?

How to run eval spawn ssh and expect in background?

我创建了一个脚本,使用 ssh 进入接入点 (AP) 并执行一些命令,我​​使用 expect 与 shell 交互。

脚本在前台 运行ning 时工作正常,但是当我尝试使用 & 在后台执行相同的脚本以分叉进程时,它停止在 spawn ssh 下面 ap_commands 脚本中的命令。

正在尝试执行:

$ run_ap &

Bash 脚本 (run_ap) 调用 expect 脚本:

#!/bin/sh
while(true); do
    /script/ap_commands
done

Tcl 和期望脚本 (ap_commands):

#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no user@192.168.92.1

#use correct prompt
set prompt ":|#|\\>"
set user   ">"

interact -o -nobuffer -re "Password:" return
send "pass12345\r"

更新 1 - 解决方案

感谢 Donal Fellows,我解决了使用 screen 命令创建新终端并在前台执行脚本的问题。

screen -dm bash ./run_ap

并且我将 -f 参数添加到 expect,以强制在前台显示 运行:

 #!/usr/bin/expect -f

interact命令将与后台脚本一起工作,因为它明确期望与用户交互(以及 spawned 子流程);当 interact 发生时,如果该进程不在前台,则 OS 会向其发出信号 (SIGTSTP),停止并等待用户将其设为前台进程。这是通常的 Unix 终端处理。

如果你想使用背景,你需要坚持expect事情。