1

Я столкнулся с довольно странным поведением 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 ответ1

0

Это то, чего я не ожидал.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .