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

Bitbucket Pipelines执行Linux多命令遇变量为空问题求助

问题原因

核心问题出在命令的引号与换行处理上:

  1. 单引号包裹整个COMMAND时,远程Shell对多行命令的换行解析可能出现异常,导致DATE变量未正确赋值,进而使BACKUP_NAME为空;
  2. 未做命令执行校验,若前序命令(如cd ~/workspace)执行失败,后续备份操作仍会盲目执行,最终导致备份目录无法生成。
修复方案

提供两种可行的修正方式:

方案1:单行命令串联(推荐)

将所有命令改为单行,用&&串联确保前序命令执行成功后再继续后续操作,避免换行解析问题:

pipelines:
  default:
    - step:
        name: 'Deployment and Backup to Staging'
        deployment: staging
        script:
          - pipe: atlassian/ssh-run:0.8.0
            variables:
              SSH_USER: 'ubuntu'
              SERVER: $HOST
              COMMAND: 'echo $HOSTNAME && cd ~/workspace && DATE=$(date +"%y%m%d") && BACKUP_NAME="test-bak-$DATE" && echo "Creating backup $BACKUP_NAME" && rm -rf test-bak-* && cp -r portals "$BACKUP_NAME"'

方案2:多行命令转义处理

若偏好多行写法,可将外层单引号改为双引号,同时转义内部双引号,避免YAML解析报错:

pipelines:
  default:
    - step:
        name: 'Deployment and Backup to Staging'
        deployment: staging
        script:
          - pipe: atlassian/ssh-run:0.8.0
            variables:
              SSH_USER: 'ubuntu'
              SERVER: $HOST
              COMMAND: "echo $HOSTNAME;
                cd ~/workspace;
                DATE=$(date +\"%y%m%d\");
                BACKUP_NAME=\"test-bak-$DATE\";
                echo \"Creating backup $BACKUP_NAME\";
                rm -rf test-bak-* ;
                cp -r portals \"$BACKUP_NAME\""
额外优化建议
  • 增加目录校验:在cd ~/workspace后添加判断,确保目录存在再执行后续操作:cd ~/workspace || { echo "Workspace directory not found"; exit 1; }
  • 备份前校验源目录:添加[ -d "portals" ] || { echo "Portals directory not found"; exit 1; },避免因源目录缺失导致备份失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:16:28