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

在Groovy中运行ssh /bin/bash << EOF命令时变量失效如何解决?

问题原因

在Groovy脚本的sh步骤中,agent端的bash会处理here-doc中的转义字符与变量展开,导致远程bash收到的循环逻辑出现异常:原脚本里远程bash的\$letter被agent bash解析为$letter,但由于变量展开顺序问题,远程bash无法正确识别循环变量,最终输出空值。

解决方案

方案一:在远程shell中先定义变量再循环

通过在远程bash中先接收agent传递的变量值,再执行循环,确保变量被正确识别:

pipeline {
    stages {
        stage('print letters') {
            steps {
                script {
                    env.letters = "a b c"
                    sh '''
                        ssh centos@x.x.x.x /bin/bash << EOF
                        # 远程shell中定义变量
                        letters="$letters"
                        echo \$letters
                        for letter in \$letters; do
                            echo "hello \$letter"
                        done
EOF
                    '''
                }
            }
        }
    }
}

方案二:使用带引号的here-doc分隔符

给远程bash的here-doc分隔符加单引号,避免agent bash展开远程脚本中的变量,同时用Groovy双引号字符串提前展开本地变量:

pipeline {
    stages {
        stage('print letters') {
            steps {
                script {
                    env.letters = "a b c"
                    sh """
                        ssh centos@x.x.x.x /bin/bash << 'EOF'
                        echo ${letters}
                        for letter in ${letters}; do
                            echo "hello \$letter"
                        done
EOF
                    """
                }
            }
        }
    }
}

方案三:通过ssh参数传递变量

将变量作为位置参数传递给远程bash,避免变量展开冲突:

pipeline {
    stages {
        stage('print letters') {
            steps {
                script {
                    def letters = "a b c"
                    sh '''
                        ssh centos@x.x.x.x /bin/bash -s "$1" << 'EOF'
                        echo \$1
                        for letter in \$1; do
                            echo "hello \$letter"
                        done
EOF
                    ''' letters
                }
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:03:12