2016-08-26 6 views
0

私は1つのコマンド持っている(動作しますが、すべてがスクリプトが実行されているターミナル出力からのコピー&ペーストである):なぜですか? CP:--parentsで、先はディレクトリでなければなりません

cp --parents mcare.properties /mnt/hgfs/Shared-workspace/Release/CRMT-mcare/msite-binaries-UAT/mcare/WEB-INF/classes 

そして、このコマンドがあります変数をスクリプトで実行される代わりに、ファイル名またはディレクトリと、それはこのように見ている(そしてこの1つは動作していない):

cp --parents $source $destination 

ログのすべての変数であるかを確認するには:

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)、それはseparatly、Iは、端末でそれを実行した場合に動作している:私はhttp://www.shellcheck.net/に走っ

+ 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. 

コードスニペット:

cd /mnt/hgfs/Shared-workspace/Workspaces-CVS/Release-CRMT-mcare/mCare/config/UAT/home/wlp/mcare/WEB-INF/classes/ || exit 
     source="mcare.properties" 
     line=config/UAT/home/wlp/mcare/WEB-INF/classes/mcare.properties 
     echo source=$source 
     DEST=/mnt/hgfs/Shared-workspace/Release/CRMT-mcare 
     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 
     declare -p destination 
     cp --parents $source $destination 
+2

は、テキストではない画像としてテキストファイルを投稿してくださいそれは/貼り付けをコピーすることは不可能で読み取ることが恐ろしいです。 –

+0

それだけでなく、私たちがリンクをたどることなく理解できない質問を許可した場合、私たちのQ&A知識ベースはlinkrotのために崩壊するでしょう。私たちはこれを最後まで続けようとしています。したがって、質問は自己完結型でなければなりません。 –

+0

...関連するクローズ理由を引用するには: "デバッグヘルプを求める質問("なぜこのコードは機能しませんか? ")には、目的の動作、特定の問題またはエラー、およびそれを再現するのに必要な最短コードが含まれている必要があります。質問自体** "。 –

答えて

1

cp --parents非POSIXでありますmkdir -pに相当する操作を実行する拡張機能で、mkdir -p経由では得られないメリットはありません。このように、簡単な答えは、それを使用して停止することです:GNU cp、手元にエラーメッセージを印刷するコードパスを使用してtarget_directory変数が空である場合にのみアクセス可能です

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

場合。これは常にGNU拡張-t使用している設定されていることを確認するための一つの方法:

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