2016-08-26 9 views
0

나는 하나 개의 명령이 (작동하지만, 모든 스크립트가 실행되는 터미널 출력에서 ​​복사 - 붙여 넣기입니다) :왜?! CP : --parents으로, 대상은 디렉토리 여야합니다

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

그리고이 명령은 대신 파일 이름의 변수 나 디렉토리와 스크립트에 의해 실행과는 다음과 같이보고있다 (이 하나가 작동하지 않습니다) :

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

cp --parents $source $destination 

로그는 모든 변수에 무엇을보고

코드 조각 자체가 : 만이 조건에서이 문제를 발생하기 때문에

 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, 노력 : 나는 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