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".
我正在查看以下 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".