使用sed替换Travis CI中.workalls.yml配置的内容时出现问题

使用sed替换Travis CI中.workalls.yml配置的内容时出现问题,sed,travis-ci,Sed,Travis Ci,我试图在travis ci中获取一个环境变量,并在运行时使用sed替换文件的内容 有关文件包括: service_name: travis-ci repo_token: COVERALLS_TOKEN 在ubuntu系统上,在命令行中使用sed-i's/COVERALLS\u-TOKEN/ASDF/g.COVERALLS.yml可以工作,但是将其转移到travis ci配置中,类似于sed-i's/COVERALLS\u-TOKEN/$COVERALLS\u-TOKEN/g.COVERALLS

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

有关文件包括:

service_name: travis-ci
repo_token: COVERALLS_TOKEN
在ubuntu系统上,在命令行中使用sed-i's/COVERALLS\u-TOKEN/ASDF/g.COVERALLS.yml可以工作,但是将其转移到travis ci配置中,类似于sed-i's/COVERALLS\u-TOKEN/$COVERALLS\u-TOKEN/g.COVERALLS.yml不会提取环境变量

真正让我扫兴的是,我今天有一个项目,下面的.travis.yml条目是有效的,但适应这种情况却不行

最初的实现,今天仍然有效

适应不起作用


单引号禁止变量展开。

您的命令有两个问题。首先,^表示它仅与行开头出现的工作服\u标记匹配。由于它不在YAML文件中的行首,因此不存在匹配项,sed命令不执行任何操作

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

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

sed -ri "s/COVERALLS_TOKEN/$COVERALLS_TOKEN/" .coveralls.yml
一些注意事项:

在运行sed命令时,必须在shell中设置变量$coverballs_标记。 如果$COVERALLS\u标记的值包含替换命令上使用的分隔符,则替换将失败,并出现语法错误。上面的命令使用/,但如果需要,您可以更改它-只需选择标记字符串中没有出现的内容。 在YAML文件中,不会以任何方式引用标记值。正常情况下,这是可以的,但是如果值中有任何奇怪的字符,则需要在YAML中将它们添加到替换命令的替换端,从而在其周围加上引号:

sed -ri "s/COVERALLS_TOKEN/'$COVERALLS_TOKEN'/" .coveralls.yml

您是否建议它可能是sed-ri的/^workalls\u TOKEN/$workalls\u TOKEN/'.workalls.yml的副本?不幸的是,这不起作用。我还尝试了sed-ri的/^COVERALLS\u TOKEN/'$COVERALLS\u TOKEN'/'.COVERALLS.yml,因为上面可能有重复的标志。是的,我建议使用's/^COVERALLS\u TOKEN/'$COVERALLS\u TOKEN'/'。你对这个命令有什么问题?@Webnet嗯,它对我有用。您是在通常的时尚shell中使用sed,还是在一些没有定义变量的奇怪环境中使用sed?谢谢,这就是我需要的细节。它正在工作。
sed -ri "s/COVERALLS_TOKEN/$COVERALLS_TOKEN/" .coveralls.yml
sed -ri "s/COVERALLS_TOKEN/'$COVERALLS_TOKEN'/" .coveralls.yml