我有一个正在运行的安装后脚本cp -f ./foo/a.json ./node_modules/bar/a.json
,但它失败并出现文件已存在的错误(它确实存在,但我试图用我自己的版本覆盖它)。
即使文件存在,该标志的全部意义难道不是-f
确保它是强制覆盖吗?
我尝试覆盖任何可能的别名...相同的结果cp
。\cp
这是在正在运行的 docker 构建执行中发生的npm install
,然后启动 npm postinstall 脚本。
以下是按要求的 docker 构建输出示例:
#10 82.12 npm WARN lifecycle [email protected]~postinstall: cannot run in wd [email protected] node -e "try{require('./postinstall')}catch(e){}" (wd=/node_modules/core-js)
#10 82.22
#10 82.22 > [email protected] postinstall /usr/local/lib/node_modules/xxx-cli
#10 82.22 > command cp -f ./foo/a.json ./node_modules/xxx-library/assets/a.json
#10 82.22
#10 82.31 cp: can't create './node_modules/xxx-library/assets/a.json': File exists
任何帮助表示赞赏!
答案1
不,那不是-f
目的。 GNU coreutils' cp
(我认为你正在使用它,cp
因为你说你已经有了linux并运行了bash)默认覆盖内容现有目标文件。 (您需要使用 明确禁用它-n
。)
如果目标文件存在,但无法打开(无论出于何种原因),-f
请进行更改并删除该文件,然后创建一个新文件,然后用原始数据填充该文件。这似乎既不能解决也不是当前的问题。
你可能想成为非常逐字记录错误消息的措辞。
无论如何,cat ./foo/a.json > ./node_modules/bar/a.json
有用吗?它实际上与您的相同cp ./foo/a.json ./node_modules/bar/a.json
,因为它只是用源覆盖目标的内容。
答案2
从问题移开,因为它是答案:
事实证明,这整个问题毫无意义。有问题的 dockerfile 正在使用-g
全局安装的模块调用 npm install ,所以我认为我无法覆盖node_modules
bcos 权限中的文件,或者因为它们没有位于我认为的位置。删除-g
并替换它ci
会使一切按预期工作。