我的 Bash 命令语法 `command && break` 正确吗?

问题描述 投票:0回答:1

所以在我的 Jenkins 构建中,当我将本地 PR 推送到 Master 时,

blackduck
在 Master 分支中扫描经常失败。所以我想介绍一些代码让它在失败时重试,我在网上查了一下,发现了一个有用的
command && break
语法,但我不确定我是否正确使用它。

这是代码:

#!/bin/bash
set -ex

. "${0%/*}/common.sh"
. activate "$PYENV_HOME"
n=0
until [ "$n" -ge 5 ]
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
  n=$((n+1)) 
  sleep 15 
done

如果可以的话,我再问一个简单的问题;引入代码后,我想在本地测试一下,所以可以简单地将

"$BRANCH_NAME"
更改为我本地 PR 分支的名称吗?

提前非常感谢。

我发现这个链接很有帮助:https://unix.stackexchange.com/questions/82598/how-do-i-write-a-retry-logic-in-script-to-keep-retrying-to-运行最多 5 次

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

command
吗?

bash build
1个回答
0
投票

我的

command && break
Bash 命令语法正确吗?

是的。

我会将其重构为

bash <(curl..... && break
。我也只会
for i in $(seq 5)
for ((i=0;i<5;++i))
而不是
while
。我认为没有理由在每个循环中都进行
if [ "$BRANCH_NAME" == "master"...
。也更喜欢
if
而不是
&&
。使用 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”更改为我当地 PR 分支机构的名称吗?

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

BRANCH_NAME=stuff ./yourscript

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

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

© www.soinside.com 2019 - 2024. All rights reserved.