스크립트에서 복사하면 내 파일이 손상되는 이유는 무엇입니까?

스크립트에서 복사하면 내 파일이 손상되는 이유는 무엇입니까?

기본적으로 여러 파일과 디렉터리를 한 곳에서 다른 곳으로 복사하는 쉘 스크립트가 왜 파일 중 두 개(그리고 그 두 개만)의 내용을 지우고 link ../../modules/[name_of_file].

APPFOLDER="/home/opt/ke"
CMD_APPCOPY="cp -fr _opt/ke/* $APPFOLDER"
[...]     
echo "copying app-files to app-folder $APPFOLDER ..."
eval $CMD_APPCOPY
if [ $? -ne 0 ] ; then
   echo "could not copy app-files to app-folder $APPFOLDER"
   exit
fi

파일 복사를 수동으로 시작하면 모든 것이 정상입니다.

cp -fr _opt/ke/* /home/opt/ke

link ../../modules/[name_of_file]그러나 스크립트를 실행하면 빈 파일 위에 추가된 섹션을 제외하고 두 파일이 모두 비어 있게 됩니다.

이 두 파일의 크기는 아주 크지도 작지도 않으며, 이 파일과 이 디렉토리에 있는 다른 파일 사이의 유일한 차이점은 Perl-Module .pm 유형이라는 것입니다. 실제 소스 대상은 /home/xxx/xxx/deploy/KEB/_opt/ke/modules/이고 전체 대상 대상은 입니다 /home/opt/ke/modules/. /home/xxx/xxx/deploy/KEB/물론 스크립트와 매뉴얼 사본 도 실행됩니다.

이 동작을 설명하는 방법이나 스크립트를 수정하기 위해 찾아야 할 사항에 대한 아이디어/제안은 크게 감사하겠습니다.

답변1

귀하의 문제는 eval.

#!/bin/bash

CMD1=(echo "onecmd")
CMD2=(printf "%s\n" ascrip*)
CMD3='echo cmd3'

${CMD1[@]}
${CMD2[@]}
$CMD3

그것을 통과시킬 필요가 없습니다 eval.

$ ./ascript.bash 
onecmd
ascript.bash
cmd3

디버그

Bash의 디버그 모드를 활성화하면 뒤에서 무슨 일이 일어나고 있는지 확인할 수 있습니다.

$ bash -x ./ascript.bash 
+ CMD1=(echo "onecmd")
+ CMD2=(printf "%s\n" ascrip*)
+ CMD3='echo cmd3'
+ echo onecmd
onecmd
+ printf '%s\n' ascript.bash
ascript.bash
+ echo cmd3
cmd3

관련 정보