如何 运行 在后台评估 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
命令将不与后台脚本一起工作,因为它明确期望与用户交互(以及 spawn
ed 子流程);当 interact
发生时,如果该进程不在前台,则 OS 会向其发出信号 (SIGTSTP),停止并等待用户将其设为前台进程。这是通常的 Unix 终端处理。
如果你想使用背景,你需要坚持expect
事情。
我创建了一个脚本,使用 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
命令将不与后台脚本一起工作,因为它明确期望与用户交互(以及 spawn
ed 子流程);当 interact
发生时,如果该进程不在前台,则 OS 会向其发出信号 (SIGTSTP),停止并等待用户将其设为前台进程。这是通常的 Unix 终端处理。
如果你想使用背景,你需要坚持expect
事情。