因此,我正在为 Java 项目编写构建脚本,并且不会mvn clean
在本地开发期间运行。因此,我为开发人员创建了一个标志-k
,将变量设置$DEV_BUILD
为1
。
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/js
rm
-k
js
rm
有人知道为什么会发生这种情况吗?
编辑
根据 @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
复制之前没有删除其中的目录再次具有相同的目标路径。