gpt4 book ai didi

bash - gitlab ci 脚本在哪个 $?允许为非零

转载 作者:行者123 更新时间:2023-11-29 08:48:56 25 4
gpt4 key购买 nike

在我们的项目中,我们有一个 shell 脚本,该脚本用于为后续构建过程设置环境变量或运行构建的应用程序。

它包含一个 block ,用于检查已设置的变量并进行一些调整。

# part of setup.sh
for LIBRARY in "${LIBRARIES_WE_NEED[@]}"
do
echo $LD_LIBRARY_PATH | \grep $LIBRARY > /dev/null
if [ $? -ne 0 ]
then
echo Adding $LIBRARY
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBRARY
else
echo Not adding $LIBRARY
fi
done

即它检查库的路径是否已经在 $LD_LIBRARY_PATH 中,如果没有,则添加它。(公平地说,这可以写成不同的 (like here) ,但假设脚本应该实现一些在不调用程序、检查 $? 然后做一件事的情况下很难做到的事情或做另一件事)。

.gitlab-ci.yml 然后包含

before_script:
- yum install -y <various packages>
- source setup.sh

但是运行程序决定在 $? 非零的那一刻停止之前的脚本,即当 if 语句决定向 $LD_LIBRARY_PATH 添加路径时.现在 gitlab runner 在我的脚本的每一行之后检查 $? 很好,但是如果 .gitlab-ci.yml 中的行是被认为是原子的。

有没有办法避免在 .gitlab-ci.yml 中的脚本中对 $? 进行中间检查?

最佳答案

使用 command_that_might_fail || true 以屏蔽所述命令的退出状态。

另请注意,您可以使用 grep -q 来阻止输出:

echo "$LD_LIBRARY_PATH" | grep -q "$LIBRARY" || true

然而,这也会掩盖您可能不想要的 $?。如果你想检查命令是否正确退出,你可以使用:

if echo "$LD_LIBRARY_PATH" | grep -q "$LIBRARY"; then
echo "Adding $LIBRARY"
else
...
fi

我怀疑 gitlab-ci 设置了 -e,您可以使用 set +e 禁用它:

set +e # Disable exit on error
for library in "${LIBRARIES_WE_NEED[@]}"; do
...
done
set -e # Enable exit on error

future 阅读:Why double quotes matterPitfalls with set -e

关于bash - gitlab ci 脚本在哪个 $?允许为非零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39466770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com