7z из скрипта bash не будет исключать директории


Я столкнулся с довольно странным поведением 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', но папки .конфиг И.кэш включается все еще, в то время как:

#!/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 2

1 ответ:

Что-то я не ожидала за.

lst1=' -xr@/home/me/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -xr!'*.local/*' '
7z a $lst1 -v2048M arch0.7z /home/me

Сделайте трюк, пока я думал, что единственная цитата в -xr!".конфиг/' завершится присвоение переменной, она фактически работает как часть аргумента. Кроме того, отлично работает, если моя переменная является массивом.

Кстати, убегая с "!"не будет работать, 7z говорит" ошибка: Неправильная командная строка " для него.