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

Windows环境下SSH命令中换行符未生效的原因排查

问题解决方法

核心原因

  1. 脚本采用Windows换行符(CR LF)保存,MSYS2的Shell处理时会将CR字符传递给远程CMD,干扰命令解析逻辑。
  2. 远程环境是Windows CMD,它不像类Unix Shell那样将换行视为命令分隔符,多行命令会被合并成一行执行——CMD的echo会输出所有后续参数,因此出现hello echo there的错误输出。

具体修复步骤

  1. 转换脚本换行符为Unix风格(LF)
    在MSYS2终端执行以下命令,先安装转换工具(未安装时)再处理脚本:

    # 安装dos2unix工具
    pacman -S dos2unix
    # 将脚本转换为LF换行
    dos2unix test.sh
    
  2. 调整SSH命令格式适配CMD规则
    CMD用&(顺序执行所有命令)或&&(仅前命令成功时执行后续命令)作为命令分隔符,需把多行命令改成CMD可识别的格式:

    • 方式一:直接用分隔符拼接命令
      修改脚本中的SSH部分为:
      ssh A-WINDOWS-SERVER "echo hello & echo there"
      
    • 方式二:保留多行写法自动转换分隔符
      若想保留多行书写形式,可通过tr命令将换行替换为CMD的&:
      ssh A-WINDOWS-SERVER cmd /c "$(cat <<'EOF'
      echo hello
      echo there
      EOF
      | tr '\n' '&')"
      
    • 方式三:用嵌套引号明确指定CMD执行
      ssh A-WINDOWS-SERVER 'cmd /c "echo hello && echo there"'
      

验证结果

修改完成后重新运行sh test.sh,远程CMD会分别输出hello和there两行内容。

内容的提问来源于stack exchange,提问作者August Karlstrom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:54:54