【发布时间】:2020-11-21 06:12:34
【问题描述】:
不知道为什么这个脚本在我的 CI 机器上总是出现语法错误。
if [ -d "$ws" ]; then
if $condition; then
echo "first condition"
elif $second_condition; then
ls -al
shopt -s extglob
rm -rf !(".repo")
ls -al
$[/myResource/ec.perl] $[/myResource/PWToolRootLocationFull]SetProperty.pl $[/myParent/parent.workflow.path]/builds/$[/myParent/variant.id]/is.repo.preserved "true"
else
echo "else"
fi
fi
意外标记 `(' 附近的语法错误
我试过了
rm -rf !(.repo)
rm -rf "!(.repo)"
rm -rf !\(.repo\)
rm -rf !"(.repo)"
它们都不起作用。
【问题讨论】:
-
只有在
shopt -s extglob缺失时才会出现错误。 -
@choroba 你用过 bash shell 吗?
-
这就是使用
sh而不是bash调用脚本时会遇到的错误,但随后您可能首先会收到“shopt: not found”错误。$[...]语法看起来很奇怪:这是 bash 不推荐使用的算术扩展语法——它在你的 CI 管道中是否有某种特殊含义? -
如果您使用
shopt -s extglob,那么rm -rf -- !(*.repo)将删除当前目录中不以.repo结尾的所有内容。 -
@glennjackman 嗯,这个 CI 管道真的很老了(超过 10 年)。如果它包含过时的内容,我不会感到奇怪。我没有收到“shopt:未找到”错误。