7z(또는 bash, 아직 모르겠습니다)에서 다소 이상한 동작을 경험했습니다. 다음 스크립트를 사용하십시오.
#!/bin/bash
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command
또한 마지막 두 줄은 한 줄로 쉽게 바꿀 수 있습니다.
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
나는 또한 다음을 시도했습니다.
command="/usr/bin/7z a $lst1 -v2048M arch0.7z /home/dh ;"
"arch0.7z" 파일을 받았지만 .config 및 .cache 폴더는 다음과 함께 계속 포함되어 있습니다.
#!/bin/bash
find /home/user -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;"
올바르게 제외된 폴더가 포함된 파일을 생성합니다.
그래서 변수에서 확장된 줄의 차이점이 무엇인지 궁금합니다.
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
제가 입력한 내용은 다음과 같습니다.
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user
7z 워크플로우에 이렇게 큰 변화가 생긴 이유가 있나요?
답변1
당신의 원래 형태
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command
$command
포함한다는 의미일 것이다산출7zip 실행의 일부로 var=$(...)
명령 출력이 변수에 저장됩니다.
그래서,
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
교체는 아니고 스크립트 오류 수정입니다.
어쨌든, 진짜 문제를 직시해보자.
셸에서 변수 할당을 실행하면 다음 사항을 확인할 수 있습니다.
$ lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
-bash: !'*.config/*': event not found
"..."
따라서 큰따옴표를 사용할 때 쉘이 변수 대체 등을 수행하기 때문에 이 행에는 오류가 있습니다 . 문제의 항목은 !
bash가 이 항목을 사용하여 기록에서 이전 명령을 참조하기 때문입니다. 대신 작은따옴표를 사용하세요.'...'
$ lst1=' -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' '
$ echo $lst1
-x@/home/user/exclude_list2.lst -xr!*.config/* -xr!*.cache/*
답변2
이건 내가 예상하지 못한 일이다.
lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me
작은 따옴표를 생각할 때 트릭을 수행합니다.-xr! '.config/'실제로 인수의 일부인 변수 할당으로 끝날 것입니다. 또한 내 변수가 배열이면 훌륭하게 작동합니다.
그런데 "!"로 탈출한다. 작동하지 않습니다. 7z는 "오류: 잘못된 명령줄"이라는 메시지를 표시합니다.