You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expect脚本执行远程命令后无法返回本地继续执行的问题求助

解决Expect脚本执行远程命令后无法回到本地继续执行的问题

你的脚本存在结构和逻辑问题,导致执行远程命令后无法回到本地脚本继续运行。以下是修正后的完整脚本:

#!/usr/bin/expect -f

set user root
set host xxxx
set password password
set cmd ls
set timeout -1

# 启动ssh连接
spawn ssh $user@$host

# 处理首次连接的指纹确认和密码输入
expect {
    "Are you sure you want to continue connecting (yes/no/\\\[fingerprint\\\])?" {
        send "yes\n"
        exp_continue
    }
    "password:" {
        send "$password\n"
    }
}

# 等待远程提示符出现
expect "\\>"

# 发送要执行的命令
send "$cmd\n"

# 捕获命令输出:匹配下一个提示符,保存中间的命令执行结果
expect -re "(.*)\\>"
set cmd_output $expect_out(1,string)

# 打印远程命令的输出
puts "远程命令输出内容:"
puts "$cmd_output"

# 退出远程机器
send "exit\n"
expect eof

# 脚本剩余部分示例
puts "回到本地脚本,开始执行后续逻辑..."
# 在这里添加你的剩余代码

关键修改说明:

  • 拆分expect块结构:原脚本把所有逻辑塞进单个expect块,导致流程混乱。拆分后先处理ssh登录交互,再单独处理命令发送、输出捕获和退出操作。
  • 捕获命令输出:通过expect -re "(.*)\\>"匹配命令执行后的远程提示符,将中间的命令输出保存到变量中,方便后续打印或处理。
  • 移除interact:interact会把控制权交给用户,导致脚本无法自动继续执行剩余部分,必须移除。
  • 正确结束远程会话:发送exit后用expect eof等待ssh会话彻底结束,确保脚本能回到本地继续执行后续代码。

内容的提问来源于stack exchange,提问作者Gaurav Baghel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:13:11