/ / rsync backup script falha quando as opções estão na variável - bash, shell, variáveis, rsync, brace-expansion

O script de backup rsync falha quando as opções estão na variável - bash, shell, variáveis, rsync, expansão de contraventamento

Eu quero usar o rsync para backups incrementais. No entanto, falha quando eu tento assim:

SRC="/"
TRG="/backup/"
LNK="/oldbackup/"
OPT="-a --exclude={/dev,/proc,/sys,/tmp,/run,/mnt,/media,/lost+found} --link-dest=$LNK"

rsync $OPT $SRC $TRG

Mas funciona assim:

SRC="/"
TRG="/backup/"
LNK="/oldbackup/"

rsync -a --exclude={/dev,/proc,/sys,/tmp,/run,/mnt,/media,/lost+found} --link-dest=$LNK $SRC $TRG

O que eu fiz errado?

Respostas:

2 para resposta № 1

Verifique a ordem das expansões em man bash: expansão de chave acontece primeiro, expansão variável acontece depois. Portanto, chaves em uma variável não são expandidas.

Você pode usar uma matriz para capturar os valores, use a expansão já na atribuição:

opts=( -a --exclude={/dev,/proc,/sys,/tmp,/run,/mnt,/media,/lost+found} --link-dest="$LNK" )
rsync "${opts[@]}" "$SRC" "$TRG"