설치 후 스크립트가 실행 중이지만 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' ( 이미 Linux와 Bash가 실행 중이라고 말씀하셨기 때문에 cp
이것을 사용하고 있다고 가정합니다 .)cp
기본씌우다콘텐츠기존 대상 파일. (를 사용하여 명시적으로 비활성화해야 합니다 -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을 호출하므로 bcos 권한의 파일을 덮어쓸 수 없거나 node_modules
해당 파일이 내가 생각하는 위치에 있지 않기 때문입니다. 제거 -g
하고 교체하면 ci
모든 것이 예상대로 작동합니다.