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

Shell脚本SSH登录远程VM执行命令返回本地结果问题求解

问题原因

你当前脚本中here-doc内的$(ls)没有做转义处理,本地Shell会在通过SSH发送命令内容前,优先在本地执行命令替换,把$(ls)替换成本地当前目录的文件列表再传给远程主机,最终你看到的就是本地的执行输出。

正确实现方式

最稳妥的方案是给here-doc的分隔符EOF加单引号,告诉本地Shell不要解析、替换脚本块内的任何变量、命令替换逻辑,所有内容原封不动传给远程VM执行:

ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no root@$1 <<'EOF'
cd /var
echo "$(ls)"
EOF
exit

补充:如果只是需要获取/var目录下的文件列表,不需要额外套echo,直接在cd /var后写ls即可拿到相同结果。

其他可选方案

如果不想修改EOF的标记,也可以单独对命令替换的$符号做转义,阻止本地提前执行替换:

ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=no root@$1 <<EOF
cd /var
echo "\$(ls)"
EOF
exit

这种方式适合脚本块里同时需要本地变量替换、远程命令执行的场景,但是如果块内需要远程执行的命令替换、变量较多,很容易漏写转义符,优先推荐给EOF加引号的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:24:39