cp -r 源目标在 shell 或 ssh 远程 shell 脚本中运行时行为不同

cp -r 源目标在 shell 或 ssh 远程 shell 脚本中运行时行为不同

cp -r jdk1.8.0_331 /usr/java命令行中,它会产生这样的文件夹:

# ls /usr/java/jdk1.8.0_331/
bin  COPYRIGHT  include  javafx-src.zip  jmc.txt  jre  legal  lib  LICENSE  man  README.html  release  src.zip  THIRDPARTYLICENSEREADME-JAVAFX.txt  THIRDPARTYLICENSEREADME.txt

然而,一旦我将其放入 shell 脚本并在远程主机中运行,ssh root@app-1 < java_install.sh就会出现这样的文件夹:

# ls /usr/java/
bin  COPYRIGHT  include  javafx-src.zip  jmc.txt  jre  legal  lib  LICENSE  man  README.html  release  src.zip  THIRDPARTYLICENSEREADME-JAVAFX.txt  THIRDPARTYLICENSEREADME.txt

一层关闭。为什么?如何在远程 shell 脚本中将文件夹作为子文件夹复制到另一个文件夹中?

这是整个脚本:

#!/bin/bash
tar -zxvf jdk-8u331-linux-x64.tar.gz
cp -r jdk1.8.0_331 /usr/java

echo '
export JAVA_HOME=/usr/java/jdk1.8.0_331
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
' >> /etc/profile

source /etc/profile
java -version

我刚刚发现,当运行两次脚本时,第二次,它将 jdk1.8.0_331 移动到 /usr/java/jdk1.8.0_331。

答案1

确保父目录/usr/java 存在然后再复制到其中。

相关内容