기본적으로 여러 파일과 디렉터리를 한 곳에서 다른 곳으로 복사하는 쉘 스크립트가 왜 파일 중 두 개(그리고 그 두 개만)의 내용을 지우고 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