Travis构建中意外令牌'else'附近的语法错误

时间:2018-07-09 13:14:47

标签: bash travis-ci

以下脚本在本地对我有用,我通过bash linter对其进行了处理,但是Travis CI抱怨(我正在使用bash travis_release.sh运行它)

这是它抱怨的部分:

#!/bin/bash
YEAR=$(date +"%Y")
MONTH=$(date +"%m")
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_NAME}"
git config --global push.default simple
git remote add origin https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git
export GIT_TAG=$YEAR-$MONTH.$TRAVIS_BUILD_NUMBER
git fetch --tags
msg="Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
if git tag "$GIT_TAG" -a -m "$msg" 2>/dev/null; then
git tag "$GIT_TAG" -a -m "Tag Generated from TravisCI for build $TRAVIS_BUILD_NUMBER"
git push origin master && git push origin master --tags
ls -aR
else echo Tag already exists; fi

错误日志为:

/home/travis/build/****/****/scripts/travis_release.sh: line 15: syntax error near unexpected token `else'
'

2 个答案:

答案 0 :(得分:1)

唯一的语法错误位是

if [ git tag $GIT_TAG -a -m "$msg" 2>/dev/null ]

应该是

if git tag $GIT_TAG -a -m "$msg" 2>/dev/null

您还可以在整个脚本中使用不带引号的变量扩展。这会导致变量的值在空白处进行单词拆分,并且外壳程序还将对它们的值进行文件名遍历。

要获得清理此脚本的进一步帮助,建议您将其粘贴到ShellCheck中,并遵循其建议。

答案 1 :(得分:0)

事实证明,由于我在Windows中编辑此文件,因此该文件与Travis不兼容。解决此问题的方法是,通过在dos2unix中执行以下操作,将.travis.yml添加到Travis管道中:

script:
- dos2unix ${TRAVIS_BUILD_DIR}/scripts/*
addons:
  apt:
    packages:
    - dos2unix