提问人:Patrick Grenier 提问时间:9/14/2023 最后编辑:Patrick Grenier 更新时间:9/15/2023 访问量:45
从 Azure Pipeline 运行的 Bash 脚本中的比较始终返回 false
Comparisons in Bash script ran from Azure Pipeline always return false
问:
我正在运行一个脚本,我需要比较两个字符串。它在本地正确运行,但是如果我通过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 运算符。 但是由于它在命令行中工作,我认为语法是正确的,也许存在环境问题?
答:
0赞
Patrick Grenier
9/15/2023
#1
问题是它实际上不是用 bash 运行的。 以下是原始答案:
Azure 是否真的使用 bash 运行脚本?获得声明输出的最可能方法是运行不支持 [[ 的 shell,例如,我可以在破折号中复制。尝试在脚本中添加 shebang (#!/bin/bash) 和/或直接调用 bash - bash ./script.sh 而不是简单的 ./script.sh
评论
[[
#!/bin/bash
bash ./script.sh
./script.sh