从 Azure Pipeline 运行的 Bash 脚本中的比较始终返回 false

Comparisons in Bash script ran from Azure Pipeline always return false

提问人:Patrick Grenier 提问时间:9/14/2023 最后编辑:Patrick Grenier 更新时间:9/15/2023 访问量:45

问:

我正在运行一个脚本,我需要比较两个字符串。它在本地正确运行,但是如果我通过Azure DevOP中的Azure-Pipeline运行,则脚本会运行,但我的if语句始终通过其他部分。

例如,此文件中的脚本:

#############################################
teststr="test"
echo $teststr
if [[ $teststr == "test" ]]; then
      echo "true"
else
      echo "false"
fi
    
if [[ $teststr != "test" ]]; then
      echo "true"
else
      echo "false"
fi
#############################################

应输出

test
true
false

当我在命令行中运行它时,它会这样做 但是,当在 Azure 管道中运行时,如下所示:

az vm run-command invoke --command-id RunShellScript --name MyVM -g Takeoffs --scripts "cd /home/user/workdir/ && 
    ./script.sh" 

它输出

test
false
false

我怎样才能让它正确地比较字符串?

我尝试比较不同的字符串,添加引号,我尝试了 -eq 和 -ne 运算符。 但是由于它在命令行中工作,我认为语法是正确的,也许存在环境问题?

bash azure-pipelines 比较

评论

2赞 tjm3772 9/14/2023
Azure 是否真的使用 bash 运行脚本?获得声明输出的最可能方法是运行不支持的 shell,例如,我可以在破折号中复制。尝试在脚本 () 中添加 shebang 和/或直接调用 bash - 而不是简单地[[#!/bin/bashbash ./script.sh./script.sh
0赞 Patrick Grenier 9/14/2023
谢谢!bash ./script.sh 现在似乎表现正常!

答:

0赞 Patrick Grenier 9/15/2023 #1

问题是它实际上不是用 bash 运行的。 以下是原始答案:

Azure 是否真的使用 bash 运行脚本?获得声明输出的最可能方法是运行不支持 [[ 的 shell,例如,我可以在破折号中复制。尝试在脚本中添加 shebang (#!/bin/bash) 和/或直接调用 bash - bash ./script.sh 而不是简单的 ./script.sh