Quando você diz que o script "constrói" o comando, você quer dizer que ele armazena em uma string (variável), e então tenta executar a string como um comando? Se assim for, colocar aspas dentro da string ( '/home/.cache'
) não fará o que você espera, porque as aspas são tratadas como dados e passadas para o comando como parte do argumento, em vez de serem analisadas e removidas antes de serem passadas como um argumento. argumento. Essencialmente, isso significa que o rsync estava sendo instruído a excluir '/home/.cache'
em vez de apenas /home/.cache
. Veja BashFAQ # 50: Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham! para mais info.
Se você está tentando construir o comando peça por peça, geralmente a melhor maneira de fazer isso é com uma matriz. Algo parecido com isto:
atticcmd=(/usr/bin/attic create --stats --verbose --exclude '/home/.cache' /media/attic-backup/paolo.attic::2016-08-27 /home)
"${atticcmd[@]}"
Ou você pode criar apenas uma parte dele em uma matriz:
atticopts=(--stats --verbose)
for e in "${excludes[@]}"; do
atticopts+=(--exclude "$e")
done
/usr/bin/attic create "${atticopts[@]}" /media/attic-backup/paolo.attic::2016-08-27 /home