Github Actions运行sed报No such file or directory错误如何解决?
问题原因
是的,该报错就是 macOS 自带的 BSD sed 与 Linux 环境使用的 GNU sed 语法差异导致的:
- macOS 下的 BSD sed 要求
-i(原地修改)参数后必须显式传入备份文件后缀,传入空字符串""代表不生成备份文件,因此你本地的写法可以正常执行 - Ubuntu(GitHub Actions 运行环境)使用的 GNU sed 中,备份后缀可以直接跟在
-i参数后,不需要单独加空字符串。你写的sed -i "" "s|verification_key|${GRAPHQL_SECRET}|" ./schema.graphql在 Linux 环境会被解析为:备份后缀为空,待操作的第一个文件名为"",替换规则成为第二个待操作文件,最终导致 sed 执行异常,要么直接报错退出,要么生成不符合预期的文件,触发后续 curl 的文件不存在报错。
修复方案
方案1:仅适配 GitHub Actions Linux 环境
直接删除 sed 命令后的空字符串即可:
sed -i "s|verification_key|${GRAPHQL_SECRET}|" ./schema.graphql
方案2:同时兼容本地 macOS 与 Linux 环境
统一指定备份后缀,执行完成后删除备份文件,两类环境都可正常识别:
sed -i.bak "s|verification_key|${GRAPHQL_SECRET}|" ./schema.graphql && rm -f ./schema.graphql.bak
可选优化建议
可以在 shell 脚本开头添加 set -eux 配置,执行时会打印所有运行的命令与参数,方便后续定位类似环境差异类问题。
内容的提问来源于stack exchange,提问作者Charklewis
相关产品推荐
相关产品推荐

