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

时间:2015-08-18 13:59:55

标签: linux bash shell tcl expect

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

脚本在前台运行时工作正常,但是当我尝试使用expect在后​​台执行相同的脚本来分叉进程时,它会在&spawn ssh处停止。下面的脚本。

尝试执行:

ap_commands

Bash脚本($ run_ap & )来调用expect脚本:

run_ap

Tcl并期望脚本(#!/bin/sh while(true); do /script/ap_commands done ):

ap_commands

更新1 - 解决方案

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

#!/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"

我向screen -dm bash ./run_ap 添加-f个参数,强制在前台运行:

expect

1 个答案:

答案 0 :(得分:3)

interact命令将使用后台脚本,因为它明确希望与用户进行交互(以及{{1} } ed subprocess);当spawn发生时,如果进程不在前台,操作系统会给它一个信号(SIGTSTP),使其停止并等待用户将其作为前台进程。这是通常的Unix终端处理。

如果你想使用背景,你需要坚持interact事物。