Spotkałem się z dziwnym zachowaniem 7z (lub bash, jeszcze nie wiem). Z następującym skryptem:
#!/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
ostatnie dwie linie można łatwo zastąpić pojedynczą linią:
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
Próbowałem też:
command="/usr/bin/7z a $lst1 -v2048M arch0.7z /home/dh ;"
Otrzymuję plik „arch0.7z”, ale foldery .config i .cache są nadal uwzględniane, podczas gdy:
#!/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 ;"
generuje plik z prawidłowo wykluczonymi folderami.
Ciekawe, jaka jest różnica między linią rozwiniętą ze zmiennej:
/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user
a ten, który wpisałem, jest następujący:
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user
Czy jest jakiś powód tak znaczących zmian w przepływie pracy 7z?
bash
7-zip
bash-scripting
Dmytro Kh.
źródło
źródło
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
Odpowiedzi:
Tego nie oczekiwałem.
zrób sztuczkę, podczas gdy myślałem o tym pojedynczym cytacie w -xr! .config / ' zakończy przypisanie zmiennej, faktycznie działa jako część argumentu. Działa również doskonale, jeśli moja zmienna jest tablicą.
Przy okazji, ucieczka z „!” nie zadziała, 7z mówi „Błąd: niepoprawna linia poleceń”.
źródło