mv 命令在 dockerfile 和本地 linux 中的行为方式不同

difference in how mv command acts in dockerfile and on my local linux

我正在查看以下 jboss/wildfly docker file,其中包含以下命令:

mv $HOME/wildfly-$WILDFLY_VERSION $JBOSS_HOME

其中 $WILDFLY_VERSION=17.0.1.Final$JBOSS_HOME=/opt/jboss/wildfly. 因此生成的命令转换为:

mv $HOME/wildfly-17.0.1.Final /opt/jboss/wildfly

稍后在文件中我们像这样启动 wildfly:

CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0"]

所以我假设上面的 mv 命令获取了 $HOME/wildfly-17.0.1.Final 目录的内容并将其放在 /opt/jboss/wildfly 目录中。

但是,如果我尝试在本地计算机 (ubuntu 18.04) 上重新创建步骤 mv $HOME/wildfly-17.0.1.Final /opt/jboss/wildfly,我最终会得到以下目录结构 /opt/jboss/wildfly/wildfly-17.0.1.Final.也就是说,wildfly-17.0.1.Final 目录本身被复制到 /opt/jboss/wildfly,而不是它的内容。 有人可以解释一下为什么我在本地得到这个结果吗?

$JBOSS_HOME路径不存在。

mv命令的作用实际上是用$HOME/wildfly-17.0.1.Final文件夹替换不存在的目录。也就是说,$HOME/wildfly-17.0.1.Final/ 的内容将移至 $JBOSS_HOME,将文件夹名称从 "wildfly-17.0.1.Final" 移至 "wildfly"。

简单的例子如下:

创建一个空目录并在其中触摸一个文件,然后尝试这样做:

mv dir /var/lib/non_existing_folder

dir 将按原样移动并替换 "non_existing_folder".