首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用sed替换Travis-CI中的.coveralls.yml配置内容

无法使用sed替换Travis-CI中的.coveralls.yml配置内容
EN

Stack Overflow用户
提问于 2017-05-08 02:53:14
回答 3查看 2.3K关注 0票数 2

我试图在travis-ci中使用一个环境变量,并在运行时使用sed替换文件的内容。

所涉档案包括:

代码语言:javascript
复制
service_name: travis-ci
repo_token: COVERALLS_TOKEN

在ubuntu系统上,在命令行中使用sed -i 's/COVERALLS_TOKEN/ASDF/g' .coveralls.yml是可行的,但是将其传递到travis-ci配置(类似于sed -i 's/COVERALLS_TOKEN/$COVERALLS_TOKEN/g' .coveralls.yml )并不会拉出环境变量。

真正让我失望的是,我今天有了一个项目,下面的.travis.yml条目可以工作,但是根据这种情况调整它就不行了。

原始实现,至今仍在工作,

代码语言:javascript
复制
sed -ri 's/^MY_ENV_VAR=/MY_ENV_VAR='$MY_ENV_VAR'/' .env

适应(不起作用)

代码语言:javascript
复制
sed -ri 's/^COVERALLS_TOKEN/$COVERALLS_TOKEN/' .coveralls.yml
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-12 18:57:30

你的命令有两个问题。首先,^意味着它只匹配在行的最开始处发生的COVERALLS_TOKEN。因为它不在YAML文件中行的开头,所以没有匹配,sed命令什么也不做。

第二,单引号中没有变量替换。

因此,删除^并使用双引号而不是单引号:

代码语言:javascript
复制
sed -ri "s/COVERALLS_TOKEN/$COVERALLS_TOKEN/" .coveralls.yml

一些注意事项:

  1. 在运行$COVERALLS_TOKEN命令时,必须在shell中设置变量sed
  2. 如果$COVERALLS_TOKEN的值包含您在替换命令中使用的分隔符,则替换将失败。上面的命令使用/,但如果需要,您可以更改它--只需选择标记字符串中没有发生的内容。
  3. 在YAML文件中将不以任何方式引用令牌值。通常情况下,这是可以的,但是如果值中有任何奇怪的字符,则需要将引号添加到替换命令的替换端,从而将引号放在YAML中: -ri‘s/工作服_令牌/’$工作服_令牌‘/“.coveralls.yml”
票数 3
EN

Stack Overflow用户

发布于 2017-05-08 06:14:35

单引号禁止变量展开。

票数 1
EN

Stack Overflow用户

发布于 2021-10-20 07:20:56

这是对我有用的。

代码语言:javascript
复制
sed -ri 's,IMAGE_REPOSITORY,'"$IMAGE_REPO"',g' chart/values.yaml
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43839065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档