"cp"는 "mvn clean" 이후 다르게 동작합니다.

"cp"는 "mvn clean" 이후 다르게 동작합니다.

그래서 Java 프로젝트용 빌드 스크립트를 작성 중인데 mvn clean로컬 개발 중에는 실행되지 않습니다. 그래서 개발자가 -k변수 $DEV_BUILD1.

function build_war {
   if [ "$DEV_BUILD" -ne 1 ]; then
      mvn clean
   fi
   cd "$PROJECT_HOME"
   # Copy over static web files to ROOT
   mkdir -p "$WAR_HOME"

   cp -r js "$WAR_HOME/js"
   rm -r "$WAR_HOME/js/src/com"
   ...
}

플래그 없이 스크립트를 실행하면 최종 -k콘텐츠가 내부에 나타나고 명령이 작동합니다. 그러나 해당 플래그를 사용하여 스크립트를 실행하면 다른 디렉터리에 디렉터리가 있고 명령이 실패합니다.js$WAR_HOME/jsrm-kjsrm

왜 이런 일이 일어나는지 아는 사람이 있나요?

편집하다

@Kusalananda의 의견에 따라 디렉터리가 이전에 존재했는지 확인하기 위해 스크립트에 몇 줄을 추가했습니다.

if [ ! -f "$WAR_HOME/js" ]; then
  echo "js doesn't exist!!"
fi

cp -r js...

플래그가 있든 없든 "존재하지 않습니다"라는 메시지가 나타납니다 -k.

답변1

당신이 사용할 때

cp source destination

destination기존 디렉터리이므로 source해당 디렉터리에 삭제됩니다.

따라서 복사하기 전에 해당 디렉토리가 삭제되지 않기 cp때문에 동작이 다르게 보입니다.js$WAR_HOME다시동일한 대상 경로를 갖습니다.

관련 정보