在“mvn clean”之后,“cp”的行为有所不同

在“mvn clean”之后,“cp”的行为有所不同

因此,我正在为 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复制之前没有删除其中的目录再次具有相同的目标路径。

相关内容