Jenkinsfile(Groovy)中sed命令执行报错求助
问题原因与解决方案
这个错误的核心是macOS BSD sed和Linux GNU sed的-i参数语法不兼容:
- 你本地终端用的是macOS的BSD sed,
-i ''表示不生成备份文件,语法合法; - 但Jenkins运行的节点是Linux环境,使用GNU sed,
-i后面的空字符串会被识别为「备份文件后缀」,此时sed会把后续的s/search/substitute/g当成要处理的文件名,而这个"文件"不存在,所以抛出找不到文件的错误。
解决方法
1. 针对Linux Jenkins节点(直接修改命令)
去掉-i后面的空字符串,GNU sed不需要这个参数即可直接修改原文件:
sh script: """ sed -i 's/search/substitute/g' "path/to/file" """
2. 兼容macOS和Linux环境(跨平台写法)
如果你的Jenkins节点可能在不同系统切换,可以通过判断系统类型执行对应命令:
sh script: """ if [[ "\$(uname)" == "Darwin" ]]; then # macOS环境用BSD sed语法 sed -i '' 's/search/substitute/g' "path/to/file" else # Linux环境用GNU sed语法 sed -i 's/search/substitute/g' "path/to/file" fi """
内容的提问来源于stack exchange,提问作者Carabes
相关产品推荐
相关产品推荐

