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

Expect脚本调用远程外部脚本时send命令输出乱码问题求助

解决Expect脚本发送输入乱码及重复输入问题

问题根源

你看到的^[[6;1Rn是终端的光标位置报告(CSI控制序列),这是因为远程bash的终端类型设置与Expect不兼容,远程端开启了光标跟踪特性,导致发送的输入被终端转义成了控制序列。而重复输入的问题是因为read -n1不需要回车,加上回车后会产生额外输入,或者Expect没有正确匹配提示符导致本地输入被重复传递。

具体解决步骤

  • 强制设置兼容的终端类型
    在启动远程脚本时,将终端类型设置为dumb(无特殊终端特性),避免控制序列干扰:

    spawn ssh user@remote_host bash -c "TERM=dumb ./script.sh"
    

    或者先在远程会话中设置终端环境变量:

    spawn ssh user@remote_host
    expect "$ " ;# 匹配远程提示符
    send "TERM=dumb; export TERM\r"
    expect "$ "
    send "./script.sh\r"
    
  • 修改send命令,去掉多余的回车
    因为read -n1会在读取单个字符后立即返回,不需要回车。直接发送输入字符即可:

    # 假设从Expect命令行获取用户输入
    set pulltar [lindex $argv 0]
    send_user "你输入的字符是: $pulltar\n"
    # 不要加\r
    send "$pulltar"
    
  • 精准匹配read的提示符
    确保Expect的expect语句准确匹配script.sh中的提示文本,避免遗漏或误匹配导致重复输入:

    # 匹配"RunFunction? [y,n]"这个提示
    expect -exact "RunFunction? [y,n]"
    send "$pulltar"
    
  • 禁用终端回显优化交互
    如果仍有终端交互异常,可以在Expect脚本开头设置终端模式为raw -echo,避免本地终端的回显干扰:

    set stty_init "raw -echo"
    spawn ssh user@remote_host ./script.sh
    # 后续逻辑...
    

内容的提问来源于stack exchange,提问作者Bartlomiej Zuranski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:55:21