在我的作業流程中進行下一個 sep 之前,需要對 2 個環境變數進行同等檢查
- name: version check
env:
version_in_code : "v$(poetry version -s)"
version_in_tag : $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
version_is_equal: ${{ env.version_in_code != env.version_in_tag }}
run: |
if [ ${{ env.version_is_equal }} ]; #here comes the error
then
echo " ${{ env.version_in_tag }} will be released"
else
git push -d origin ${{ env.version_in_tag }}
echo "?? Tag-version: ${{ env.version_in_tag }} and Code-version: ${{ env.version_in_code are NOT equivalent"
exit 1
fi
$env.version_is_equalif 條件檢查中不允許使用,并且錯誤訊息非常混亂:Unexpected symbol: 'are'我該如何解決這個問題?
uj5u.com熱心網友回復:
有 Gui 指出的語法問題,但也有一個 Bash 問題:this
[ ${{ env.version_is_equal }} ]
要么[ true ]要么[ false ]。這將始終評估為true,因為該構造檢查它是否包含非空字串;它不關心字串是否為trueor false。
然后,您可以替換${{ env.version_is_equal }}為$version_is_equal; 沒有太大區別,但更方便。
要修復比較,您必須與字串進行比較:
if [ "$version_is_equal" = 'true' ]; then
或將其作為命令運行(不帶)[ ... ],它更短,但更神奇:
if "$version_is_equal"; then
這是有效的,因為true并且false是回傳成功/失敗退出狀態的命令。
請注意,這
version_in_tag : $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
僅在使用時評估,而不是在分配時評估。在使用之前,它只是一個字串。這可能是也可能不是意圖,但在我看來,將作業作為腳本本身的一部分更清楚:
version_in_tag=$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
uj5u.com熱心網友回復:
語法似乎有錯誤。
您沒有在錯誤訊息實作中關閉 env 變數:
echo "?? Tag-version: ${{ env.version_in_tag }} and Code-version: ${{ env.version_in_code are NOT equivalent"
你用${{ env.version_in_code而不是${{ env.version_in_code }}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517956.html
標籤:if 语句github-动作
