我的脚本尝试在所有项目中执行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;
Run Code Online (Sandbox Code Playgroud)
为什么我收到这个错误?
第 17 行:结束:找不到命令 ./script.sh:第 20 行:语法
靠近意外令牌
git' ./script.sh: line 20:
git checkout dev 的错误;'
您已经使用了“fish”标签,所以我假设您正在使用鱼壳运行它。
如果是这样:这不是有效的鱼脚本。Fish 显然不兼容 POSIX,因此您可能需要阅读语法。(如果不是,请更正您的标签)
红色=$'\e[1;31m';
Fish 不var=value
用于设置变量。它使用set var value
.
鱼也没有$''
引用的风格。相反,反斜杠转义在引号之外被解释。
所以这将是set red \e"[1;31m"
。或者,fish 提供set_color
内置函数,它打印给定颜色的转义序列。所以这可能是set red (set_color red)
(或者你可以set_color
稍后打电话)。
then
Run Code Online (Sandbox Code Playgroud)
鱼不使用if condition; then dosomething; fi
。它是if condition; dosomething; end
。
echo -en "${grn}[${1}]Build ok${end}";
Run Code Online (Sandbox Code Playgroud)
鱼不使用"${var}"
。它也不调用函数参数$1
等。
这将类似于echo -ens "$grn" "[$argv[1]]" "Build ok" "$end"
.
exit 1
Run Code Online (Sandbox Code Playgroud)
Fish 目前不允许exit
从函数中调用。你必须return 1
从外面检查结果。
此外,您到处都在使用分号,这在我所知道的任何 shell 中都不是典型的样式。
如果您不使用 fish,而是使用一些 POSIX 兼容的 shell(如 bash),这也是无效的。主要(也可能是唯一的)问题是您正在使用function something; dosomething; end
. 在 bash 中,这将是
function something () {
#dostuff
}
Run Code Online (Sandbox Code Playgroud)
在纯 POSIX 中,这将是
something () {
#dostuff
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
316 次 |
最近记录: |