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

含DNS变量的双引号Bash脚本运行失败,求排查解决

问题

原本使用单引号包裹的Bash脚本可正常运行(需硬编码EC2的PublicDNS):

sh '''
    ssh -o StrictHostKeyChecking=no \
        -i my-key.pem \
        ec2-user@ec2-xxx-xxx.amazonaws.com \
        "sudo yum update -y && \
        sudo yum install docker -y && \
        sudo systemctl start docker && \
        sudo docker pull image/test:be && \
        sudo docker run -d -p 8080:8080 image/test:be"
'''

将DNS替换为变量$DNS并改用双引号包裹脚本后,出现错误:

sh """
    ssh -o StrictHostKeyChecking=no \
        -i my-key.pem \
        ec2-user@$DNS \
        "sudo yum update -y && \
        sudo yum install docker -y && \
        sudo systemctl start docker && \
        sudo docker pull image/test:be && \
        sudo docker run -d -p 8080:8080 image/test:be"
"""

错误信息:

/var/jenkins_home/workspace/script.sh: 3: sudo yum update -y &&         sudo yum install docker -y &&         sudo systemctl start docker &&         sudo docker pull image/test:be &&         sudo docker run -d -p 8080:8080 image/test:be: not found
解决方案

错误根源是双引号嵌套导致的解析异常:外层用双引号时,内层的双引号会被本地Shell当作外层引号的结束标记,导致ssh命令的远程执行参数被错误拆分,本地Shell会把原本要传给远程的整条命令当作一个不存在的本地命令去执行。

修复方法有两种:

方法1:内层命令改用单引号

外层双引号解析$DNS变量,内层用单引号包裹远程执行的命令,避免引号冲突:

sh """
    ssh -o StrictHostKeyChecking=no \
        -i my-key.pem \
        ec2-user@$DNS \
        'sudo yum update -y && \
        sudo yum install docker -y && \
        sudo systemctl start docker && \
        sudo docker pull image/test:be && \
        sudo docker run -d -p 8080:8080 image/test:be'
"""

方法2:转义内层双引号

保留内层双引号,但用反斜杠\转义,让本地Shell把它当作普通字符处理,传递给远程主机:

sh """
    ssh -o StrictHostKeyChecking=no \
        -i my-key.pem \
        ec2-user@$DNS \
        \"sudo yum update -y && \
        sudo yum install docker -y && \
        sudo systemctl start docker && \
        sudo docker pull image/test:be && \
        sudo docker run -d -p 8080:8080 image/test:be\"
"""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:13:25