Bash 为什么?cp:对于--parents,目标必须是一个目录

Bash 为什么?cp:对于--parents,目标必须是一个目录,bash,directory,parent,cp,Bash,Directory,Parent,Cp,我有一个命令(它可以工作,但当脚本运行时,一切都是从终端输出复制粘贴): 这个命令是由一个带有变量的脚本执行的,而不是文件名或目录,它看起来是这样的(这个命令不起作用): 记录日志以查看每个变量中的内容: source=mcare.properties pwd: /mnt/hgfs/Shared-workspace/Workspaces-CVS/Release-CRMT-mcare/mCare/config/UAT/home/wlp/mcare/WEB-INF/classes total 16

我有一个命令(它可以工作,但当脚本运行时,一切都是从终端输出复制粘贴):

这个命令是由一个带有变量的脚本执行的,而不是文件名或目录,它看起来是这样的(这个命令不起作用):

记录日志以查看每个变量中的内容:

source=mcare.properties
pwd:
/mnt/hgfs/Shared-workspace/Workspaces-CVS/Release-CRMT-mcare/mCare/config/UAT/home/wlp/mcare/WEB-INF/classes
total 16
-rwxrwxrwx. 1 root root  6724 Feb 29 19:50 activareCont.properties
drwxrwxrwx. 1 root root     0 Feb 29 20:10 CVS
-rwxrwxrwx. 1 root root  2333 Aug 25 17:55 externalpartner.properties
-rwxrwxrwx. 1 root root  1764 May 26 10:36 login.properties
-rwxrwxrwx. 1 root root 10068 Aug 25 17:55 mcare.properties
-rwxrwxrwx. 1 root root  8551 May 27 16:04 msite.properties
config/UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
medium=UAT
/mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes
cp: with --parents, the destination must be a directory
Try `cp --help' for more information.
代码片段本身:

        cd $SOURCE/"${line%mcare*}"
        source="mcare.properties"
        echo source=$source
        echo "pwd:"
        pwd
        ls -l
        echo $line
        medium="${line#*config/}"
        echo $medium
        medium="${medium%/home*}"
        echo medium=${medium}""
        destination=$DEST/msite-binaries-$medium/mcare/WEB-INF/classes
        echo $destination
        cp --parents $source $destination
我发布了一段我自己的代码,因为我只有在这种情况下才会出现这个问题。我不知道我怎样才能解释它

执行bash-x脚本名后回复Charles Duffy。在该位置(pwd)执行的同一行,如果我在终端中单独执行,则该行工作:

+ cd /mnt/hgfs/Shared-workspace/Workspaces-CVS/Release-CRMT-mcare/mCare/config/UAT/home/wlp/mcare/WEB-INF/classes/
+ source=mcare.properties
+ echo source=mcare.properties
source=mcare.properties
+ echo pwd:
pwd:
+ pwd
/mnt/hgfs/Shared-workspace/Workspaces-CVS/Release-CRMT-mcare/mCare/config/UAT/home/wlp/mcare/WEB-INF/classes
+ ls -l
total 16
-rwxrwxrwx. 1 root root  6724 Feb 29 19:50 activareCont.properties
drwxrwxrwx. 1 root root     0 Feb 29 20:10 CVS
-rwxrwxrwx. 1 root root  2333 Aug 25 17:55 externalpartner.properties
-rwxrwxrwx. 1 root root  1764 May 26 10:36 login.properties
-rwxrwxrwx. 1 root root 10068 Aug 25 17:55 mcare.properties
-rwxrwxrwx. 1 root root  8551 May 27 16:04 msite.properties
+ echo config/UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
config/UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
+ medium=UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
+ echo UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties
+ medium=UAT
+ echo medium=UAT
medium=UAT
+ destination=/mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes
+ echo /mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes
/mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes
+ cp --parents mcare.properties /mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes
cp: with --parents, the destination must be a directory
Try `cp --help' for more information.
我在其中运行的代码段:

cp--parents
是一个非POSIX扩展,负责运行相当于
mkdir-p
的操作,并且不提供通过
mkdir-p
本身无法获得的任何好处。因此,简单的答案是停止使用它:

mkdir -p -- "$destination" || exit
cp -- "$source" "$destination/"

如果使用GNU
cp
,则只有当
target\u目录
变量为空时,才能访问打印当前错误消息的代码路径。确保始终设置此选项的一种方法是使用GNU扩展名
-t

[[ -d "$destination" ]] || {
  echo "$destination is not a reachable directory" >&2
  exit 1
}
cp -t "$destination" -- "$source" || exit
cp--parents
是一个非POSIX扩展,负责运行相当于
mkdir-p
的操作,并且不提供通过
mkdir-p
本身无法获得的任何好处。因此,简单的答案是停止使用它:

mkdir -p -- "$destination" || exit
cp -- "$source" "$destination/"

如果使用GNU
cp
,则只有当
target\u目录
变量为空时,才能访问打印当前错误消息的代码路径。确保始终设置此选项的一种方法是使用GNU扩展名
-t

[[ -d "$destination" ]] || {
  echo "$destination is not a reachable directory" >&2
  exit 1
}
cp -t "$destination" -- "$source" || exit

请将文本文件发布为文本而不是图像。阅读很可怕,无法复制/粘贴。不仅如此,如果我们允许不遵循链接就无法理解的问题,我们的问答知识库将因链接腐烂而崩溃。我们正努力让这一切持续下去;因此,问题必须是自包含的……引用相关的封闭理由:“寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。”。有趣的是——当变量被分配了无法触发相关错误的常量值时,显然会抑制。找到了真正的问题--在cp时,需要保持相同的目录结构(它更适合当前的需要)。例如,99%的文件是这样复制的:cp--parents/d/e/f.properties/a/b/c。但错误来自于尚未创建目录/a/b/c。最后,文件应该位于/a/b/c/d/e/f.properties这样的位置。我很难——家长可以为该结构创建目录,但它只是源代码中的结构。现在当我觉得一切看起来都那么愚蠢和明显。。。感谢收到的任何建设性/有用的答案请将文本文件作为文本而不是图像发布。阅读是可怕的,无法复制/粘贴。不仅如此,如果我们允许没有链接就无法理解的问题,我们的问答知识库将因链接而崩溃。我们正努力让这一切持续下去;因此,问题必须是自包含的……引用相关的封闭理由:“寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。”。有趣的是——当变量被分配了无法触发相关错误的常量值时,显然会抑制。找到了真正的问题--在cp时,需要保持相同的目录结构(它更适合当前的需要)。例如,99%的文件是这样复制的:cp--parents/d/e/f.properties/a/b/c。但错误来自于尚未创建目录/a/b/c。最后,文件应该位于/a/b/c/d/e/f.properties这样的位置。我很难——家长可以为该结构创建目录,但它只是源代码中的结构。现在当我觉得一切看起来都那么愚蠢和明显。。。感谢收到任何建设性/有益的答复
[[ -d "$destination" ]] || {
  echo "$destination is not a reachable directory" >&2
  exit 1
}
cp -t "$destination" -- "$source" || exit