代码之家  ›  专栏  ›  技术社区  ›  killerbee88

“命令&&break”的Bash命令语法正确吗?

  •  0
  • killerbee88  · 技术社区  · 1 年前

    在我的詹金斯建筑中,当我向Master推销当地公关时, blackduck 主分支中的扫描经常失败。因此,我想介绍一些代码,让它在失败时重试。我在网上查找了一个有用的 command && break 语法,但我不确定我是否正确使用了它。

    这是代码:

    #!/bin/bash
    set -ex
    
    . "${0%/*}/common.sh"
    . activate "$PYENV_HOME"
    for ((i=0;i<5;++i));
    do
      if [[ "$BRANCH_NAME" == "master" || "$BRANCH_NAME" == "main" ]]; then
        DETECT_PROJECT_VERSION_NAME="$BRANCH_NAME"
        DETECT_PROJECT_VERSION_PHASE="PRERELEASE"
    
        bash <(curl -s https://artifactory.dev.com/artifactory/blackduck-detect/detect7.sh) \
          --blackduck.url=https://com_name.app.blackduck.com \
          --blackduck.api.token="${BLACKDUCK_API_TOKEN}" \
          --detect.project.name="${DETECT_PROJECT_NAME}" \
          --detect.project.version.name="${DETECT_PROJECT_VERSION_NAME}" \
          --detect.project.version.phase="${DETECT_PROJECT_VERSION_PHASE}" \
          --detect.code.location.name="${DETECT_PROJECT_NAME}_${BRANCH_NAME}" \
          --detect.source.path="$(pwd)" \
          --detect.excluded.directories=/tests/
          && break
      fi
      sleep 15 
    done
    

    如果可以的话,还有一个快速的问题;在介绍了代码之后,我想在本地测试它,这样就可以简单地更改 "$BRANCH_NAME" 到我当地公关部门的名字?

    我发现这个链接很有帮助: https://unix.stackexchange.com/questions/82598/how-do-i-write-a-retry-logic-in-script-to-keep-retrying-to-run-it-upto-5-times

    但是我可以用我的整个代码代替吗 command ?

    1 回复  |  直到 1 年前
        1
  •  0
  •   KamilCuk    1 年前

    我的Bash命令语法是的吗 command && break 对的

    的退出状态 if 0 ,当没有 else 块和条件(如果为false),或者整个的退出状态 如果 块等于最后执行的命令的退出状态。因此,如果条件为假,那么 && break 将断开,如果条件为真,则 bash <(curl 将执行并将 &&打破 取决于退出状态。

    我会将其重构为 bash <(curl..... && break 。我也只是 for i in $(seq 5) for ((i=0;i<5;++i)) 而不是 while .我觉得没有理由这么做 if [ "$BRANCH_NAME" == "master"... 每个循环。也更喜欢 如果 而不是 && 。使用shellcheck检查您的脚本。此外,您可以使用 $PWD 而不是 $(pwd) .

    #!/bin/bash
    set -ex
    
    . "${0%/*}/common.sh"
    . activate "$PYENV_HOME"
    if [[ "$BRANCH_NAME" == "master" || "$BRANCH_NAME" == "main" ]]; then
        DETECT_PROJECT_VERSION_NAME="$BRANCH_NAME"
        DETECT_PROJECT_VERSION_PHASE="PRERELEASE"
        for ((i=0;i<5;++i)); do
            if 
               bash <(curl -s https://artifactory.dev.com/artifactory/blackduck-detect/detect7.sh) \
               --blackduck.url=https://com_name.app.blackduck.com \
               --blackduck.api.token="${BLACKDUCK_API_TOKEN}" \
               --detect.project.name="${DETECT_PROJECT_NAME}" \
               --detect.project.version.name="${DETECT_PROJECT_VERSION_NAME}" \
               --detect.project.version.phase="${DETECT_PROJECT_VERSION_PHASE}" \
               --detect.code.location.name="${DETECT_PROJECT_NAME}_${BRANCH_NAME}" \
               --detect.source.path="$PWD" \
               --detect.excluded.directories=/tests/
            then
               break
            fi
       done
    fi
    

    所以可以简单地将“$BRANCH_NAME”更改为我当地公关分支机构的名称吗?

    它只是一个变量,设置并导出。

    BRANCH_NAME=stuff ./yourscript
    

    但是我可以用我的全部代码代替命令吗?

    一般来说是的。研究bash中的命令退出状态