脚本中的语法错误
Syntax error in script
我的脚本尝试在所有项目中执行 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}[]Build ok${end}";
else
echo "${red}[]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;
为什么我收到这个错误?
line 17: end: command not found ./script.sh: line 20: syntax
error near unexpected token git' ./script.sh: line 20:
git checkout dev;'
您已经使用了 "fish" 标签,所以我假设您是 运行 这条鱼 shell.
如果是:这不是有效的鱼脚本。 Fish 显然不兼容 POSIX,因此您可能需要阅读语法。 (如果不是,请更正您的标签)
红=$'\e[1;31m';
Fish 不使用 var=value
设置变量。它使用 set var value
.
Fish 也没有 $''
引用风格。相反,反斜杠转义被解释为引号外。
所以这将是 set red \e"[1;31m"
。或者,fish 提供了 set_color
内置函数,它打印给定颜色的转义序列。所以这可能是 set red (set_color red)
(或者您可以稍后调用 set_color
)。
then
鱼不使用if condition; then dosomething; fi
。这是 if condition; dosomething; end
.
echo -en "${grn}[]Build ok${end}";
鱼不使用"${var}"
。它也不调用函数参数 </code> 等 </p>
<p>这类似于 <code>echo -ens "$grn" "[$argv[1]]" "Build ok" "$end"
。
exit 1
Fish 目前不允许 exit
从函数中调用。您必须 return 1
并从外部检查结果。
此外,您到处都在使用分号,这在我所知道的 shell 中都不是典型的风格。
如果您使用的不是 fish,而是一些 POSIX 兼容的 shell(例如 bash),这也是无效的。主要(也可能是唯一)问题是您正在使用 function something; dosomething; end
。在 bash 中,那将是
function something () {
#dostuff
}
在纯 POSIX 中,那将是
something () {
#dostuff
}
我的脚本尝试在所有项目中执行 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}[]Build ok${end}";
else
echo "${red}[]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;
为什么我收到这个错误?
line 17: end: command not found ./script.sh: line 20: syntax
error near unexpected token
git' ./script.sh: line 20:
git checkout dev;'
您已经使用了 "fish" 标签,所以我假设您是 运行 这条鱼 shell.
如果是:这不是有效的鱼脚本。 Fish 显然不兼容 POSIX,因此您可能需要阅读语法。 (如果不是,请更正您的标签)
红=$'\e[1;31m';
Fish 不使用 var=value
设置变量。它使用 set var value
.
Fish 也没有 $''
引用风格。相反,反斜杠转义被解释为引号外。
所以这将是 set red \e"[1;31m"
。或者,fish 提供了 set_color
内置函数,它打印给定颜色的转义序列。所以这可能是 set red (set_color red)
(或者您可以稍后调用 set_color
)。
then
鱼不使用if condition; then dosomething; fi
。这是 if condition; dosomething; end
.
echo -en "${grn}[]Build ok${end}";
鱼不使用"${var}"
。它也不调用函数参数 </code> 等 </p>
<p>这类似于 <code>echo -ens "$grn" "[$argv[1]]" "Build ok" "$end"
。
exit 1
Fish 目前不允许 exit
从函数中调用。您必须 return 1
并从外部检查结果。
此外,您到处都在使用分号,这在我所知道的 shell 中都不是典型的风格。
如果您使用的不是 fish,而是一些 POSIX 兼容的 shell(例如 bash),这也是无效的。主要(也可能是唯一)问题是您正在使用 function something; dosomething; end
。在 bash 中,那将是
function something () {
#dostuff
}
在纯 POSIX 中,那将是
something () {
#dostuff
}