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

SSH远程执行命令返回结果换行符转为空格的原因排查

问题原因与解决方案

这个问题其实不是SSH把换行符转成了空格,问题出在bash处理变量展开的逻辑上!

为什么会出现这种情况?

当你用VARcmdChk="$(ssh ...)"把远程命令的结果存入变量时,SSH返回的输出里其实是保留了换行符的。但当你执行echo ${VARcmdChk}时,bash会把变量中的换行符、空格、制表符都视为“单词分隔符”,自动将它们替换成空格,然后把所有内容合并成一行输出——这才是换行消失的真正原因。

解决方法(不用scp,本地直接查看)

这里有几个简单的办法可以保留换行:

  • 用双引号包裹变量输出:
    执行echo "${VARcmdChk}",双引号会告诉bash要保留变量里的原始格式(包括换行符),这样输出就会和本地执行时一样正常换行了。

  • 直接远程执行命令,不存入变量:
    如果你不需要把结果存下来后续处理,直接运行远程命令即可:

    ssh ${VARuser}@${VARserver} "find ~/logs/ -iname 'status' | xargs grep 'last seen' | sort --field-separator=: -k 4 -g"
    

    这样远程命令的输出会直接通过SSH传输到本地终端,终端会正常解析换行符显示。

  • 用printf代替echo:
    printf对格式的处理更严谨,执行printf '%s' "$VARcmdChk"也能完整保留变量中的换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:41