Colocar um comando complexo em uma variável nunca é uma abordagem recomendada. Veja BashFAQ / 050 - Estou tentando colocar um comando em uma variável, mas os casos complexos sempre falham!
Sua exigência se torna realmente simples, se você decidir usar uma função em vez de uma variável e passar argumentos para ela.
Algo como
rsync_custom() {
[ "$#" -eq 0 ] && { printf 'no arguments supplied' >&2; exit 1 ; }
rsync -avz --{partial,stats,delete,exclude=".*"} "$@"
}
e agora passa os argumentos necessários para ele como
rsync_custom /dir1 /dir2
A definição da função é bastante simples de uma forma, primeiro verificamos a contagem do argumento de entrada usando a variável $#
que não deveria ser zero. Nós jogamos uma mensagem de erro dizendo que nenhum argumento é fornecido. Se houver argumentos válidos, "$@"
representa os argumentos reais fornecidos para a função.
Se esta é uma função que você usaria com bastante frequência, por exemplo, em scripts / linha de comando, adicione-a aos arquivos de inicialização do shell, .bashrc
, .bash_profile
, por exemplo.
Ou, conforme observado, pode valer a pena expandir a expansão de chaves para separar argumentos para uma melhor legibilidade, pois
rsync_custom() {
[ "$#" -eq 0 ] && { printf 'no arguments supplied' >&2; exit 1 ; }
rsync -avz --partial --stats --delete --exclude=".*" "$@"
}