我尝试在我的Bamboo计划中运行shell命令。这是我尝试运行的代码:
["$(git rec-parse--abbrev-ref HEAD)" == *测试* ] || [ "$(git reg-parse--abbrev-ref HEAD)" == *开发*]
应该检查分支名称是< code>test还是< code>develop。如果是,那么它应该打印消息< code>yes。
我在分支Development
上运行它,然后我得到了错误。
错误信息:[:开发:意外运算符
更新:
这是POSIX,所以基于一个帖子:bash中的字符串比较。[[:未找到我用单个 =
替换了 =
=。
所以我的命令看起来:
[“$(git rev parse--abbrev ref HEAD)”=*测试*]||[“$”(git rev parse--abbrev refHEAD)“=*开发*]
我收到的错误消息:[:pytest.ini:意外运算符
不知道什么是pytest.ini在这里做什么。我的应用程序使用 pytest,但在此步骤中我没有运行它。
单括号的问题是通配符是通过文件名扩展(global bing)扩展的。考虑一下:
$ touch test{1,2,3,4}
$ set -x
$ [ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ] || [ "$(git rev-parse --abbrev-ref HEAD)" == *"develop"* ] && echo "yes"
$ [ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ]
++ git rev-parse --abbrev-ref HEAD
+ '[' develop == test1 test2 test3 test4 ']'
-bash: [: too many arguments
如果外壳中有双括号,则可以用双括号替换单括号:
[[ "$(git rev-parse --abbrev-ref HEAD)" == *"test"* ]] \
|| [[ "$(git rev-parse --abbrev-ref HEAD)" == *"develop"* ]] && echo "yes"
或者,您可以按如下方式使用< code>case:
case "$(git rev-parse --abbrev-ref HEAD)" in
*test*|*develop*)
echo 'yes'
;;
esac
请注意,单引号(< code>[)只是< code>test内置的同义词,唯一的例外是单引号要求最后一个参数是< code>]。