groovy 中 Jenkinsfile 中的引号问题

问题描述 投票:0回答:1

我正在尝试在 groovy 文件中使用

sed
,该文件由 Jenkinsfile 执行

我的代码是:

sh script: """
sed -i '' "s/search/substitute/g" "path/to/file"
"""

目的是更改文件中的

search
元素
path/to/file

对于

substitute
.我可以确认 sed 代码,如果在终端中手动执行可以正常工作。

但是我收到以下错误:

sed: can't read s/search/substitute/g: No such file or directory

我尝试颠倒搜索和路径参数的顺序,但没有成功。

当我收到该错误时,

s/search/substitute/g
周围的引号不会出现,但是

我尝试过

's/search/substitute/g'
"s/search/substitute/g"
\"s/search/substitute/g\"
\'s/search/substitute/g\'
遇到相同的错误。

我做错了什么?

groovy sed jenkins-groovy
1个回答
0
投票

显然您的

sed
版本不需要
-i
选项的参数。因此
''
被解释为您的脚本,
s/search/substitute/g
被解释为要处理的文件的名称。

通常,BSD(以及 Mac)

sed
需要
-i
的参数,而 Linux 则不需要。

如果您想创建一个不受平台影响的脚本,可以在

-i
之后直接传递一个非空参数,例如
-i~
。 (可能要小心删除它之后创建的文件。如果不明显,这会告诉
sed
保存原始输入文件,并在其名称后添加波形符。)

© www.soinside.com 2019 - 2024. All rights reserved.