脚本中的语法错误

时间:2017-08-18 12:58:07

标签: fish

我的脚本尝试在所有项目中执行 mvn clean install ,但在尝试切换到dev分支并将其拉出之前。

successString="[INFO] BUILD SUCCESS";
file="mvnoutput";
red=$'\e[1;31m';
grn=$'\e[1;32m';
end=$'\e[0m';

function checkResult
    if grep -Fxq "$successString" $file 
    then
        echo -en "${grn}[${1}]Build ok${end}";
    else    
        echo "${red}[${1}]Error in mvn clean install${end}";
        exit 1;
    fi;
end

function pullAndSwitchDevBranch
    git checkout dev;
    git pull origin dev;
end 

cd api-pay-commons/;
pullAndSwitchDevBranch;
touch mvnoutput;
mvn clean install -U > mvnoutput;
checkResult PAY;

为什么我收到此错误?

  

第17行:结束:未找到命令./script.sh:line 20:syntax

     意外令牌git' ./script.sh: line 20: git checkout dev附近的

错误;

1 个答案:

答案 0 :(得分:4)

你使用了" fish"标签,所以我假设你用鱼壳运行它。

如果是这样:这不是一个有效的鱼脚本。 Fish显然不与POSIX兼容,因此您可能希望阅读语法。 (如果没有,请更正您的标签)

红色= $' \ E [1;31米&#39 ;;

Fish不使用var=value来设置变量。它使用set var value

Fish也没有$''引用方式。相反,反斜杠转义被解释为之外的引号。

所以这将是set red \e"[1;31m"。或者,fish提供set_color内置函数,它会打印给定颜色的转义序列。这可能是set red (set_color red)(或者您可以稍后致电set_color。)

then

Fish不使用if condition; then dosomething; fi。这是if condition; dosomething; end

echo -en "${grn}[${1}]Build ok${end}";

Fish不使用"${var}"。它也不会调用函数参数$1等等。

这就像echo -ens "$grn" "[$argv[1]]" "Build ok" "$end"

exit 1

Fish目前不允许exit来自函数。您必须return 1并检查外部的结果。

此外,您在整个地方使用分号,这在我所知道的任何外壳中都不是典型的风格。

如果你不使用fish,而是使用一些与POSIX兼容的shell(比如bash),这也是无效的。主要(也可能是唯一)问题是您正在使用function something; dosomething; end。在bash中,那将是

 function something () {
      #dostuff
 }

在纯POSIX中,那将是

 something () {
     #dostuff
 }