/ Skrypt kopii zapasowej / rsync kończy się niepowodzeniem, gdy opcje są zmienne - bash, shell, variables, rsync, brace-expand

rsync backup script nie działa, gdy opcje są zmienne - bash, shell, zmienne, rsync, brace-expansion

Chcę używać rsync do przyrostowych kopii zapasowych. Jednak zawodzi, gdy próbuję tego tak:

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

rsync $OPT $SRC $TRG

Ale działa tak:

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

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

Co zrobiłem źle?

Odpowiedzi:

2 dla odpowiedzi № 1

Sprawdź kolejność rozszerzeń w man bash: rozwijanie nawiasów odbywa się najpierw, późniejsze rozszerzanie zmiennych. Dlatego nawiasy klamrowe w zmiennej nie są rozwijane.

Możesz użyć tablicy do przechwycenia wartości, użyj rozszerzenia już w przypisaniu:

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