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
相关产品推荐
相关产品推荐

