我正在尝试为我的子组项目提取Gitlab页面路径。
CI_PAGES_URL
变量是https://mygroup.gitlab.io/subgroup/project/
。我使用以下脚本来提取路径:
echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\3#g'
在我的本地环境中,一切似乎都很好:
> export CI_PAGES_URL=https://mygroup.gitlab.io/subgroup/project/
> echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\3#g'
/subgroup/project/
但是在Gitlab CI环境中,事情并没有像预期的那样:
> echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\3#g'
/project/
当然,我已检查过其他子匹配:
> echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\1#g'
https
> echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\2#g'
mygroup.gitlab.io/subgroup
> echo $CI_PAGES_URL | sed -E 's#^(http|https)://([[:alnum:]\.\-\_]+)(/.+)$#\3#g'
/project/
我检查了sed
版本。 CI和我的本地环境都使用GNU sed 4.4
。
到底是怎么回事?
原来这解决了我的问题。我仍然不知道为什么我的本地环境和CI之间存在差异。但是你现在有了:
echo "$CI_PAGES_URL" | sed -E 's#^(http|https)://([[:alnum:]\.-\_]+?)(/.+)$#\3#g'
有2个变化:
$CI_PAGES_URL
。?
添加到域名匹配(\2
)。