Tenho certeza de que está completamente claro no assunto :) Brincadeiras à parte, acho que parte do problema que estou tendo em encontrar uma resposta é escrever os termos da pesquisa.
Tive boa sorte ao emitir comandos em um script bash usando uma matriz para os argumentos.
Por exemplo, estou chamando o rsync e criei uma matriz como (alerta de spolier - variáveis supérfluas serão referenciadas posteriormente):
#!/usr/bin/env bash
set -euo pipefail
rf=.rsync-filter
srcff="/home/roger/home$rf"
hm=/home/roger
syncto=/tmp/to-remote/home
rsarg=(-avv --prune-empty-dirs --stats)
rsarg+=(--dry-run)
rsync "${rsarg[@]}" "$hm" "$syncto/" #works
exit
Onde estou tendo problemas é adicionar a variável $ srcff a uma regra de filtro e adicionar isso à matriz rsarg.
rsarg+=("--filter='merge $srcff'") # no dice
# or this
rsarg+=("--filter='merge ${srcff}'") # sad trombone
Ao correr, recebo:
$ ./home-sync-simple
Unknown filter rule: ''merge /home/roger/home.rsync-filter''
rsync error: syntax or usage error (code 1) at exclude.c(904) [client=3.1.1]
Posso fazê-lo funcionar adicionando a regra de mesclagem à linha rsync, fora da matriz e menos a variável incorporada:
rsync "${rsarg[@]}" --filter='merge /home/roger/home.rsync-filter' "$hm" "$syncto/"
A substituição do filtro acima pela variável fora do array falha da mesma maneira:
rsync "${rsarg[@]}" "--filter='merge $srcff'" "$hm" "$syncto/"
Eu tentei muitas outras variações, estou assumindo todos os possíveis, com exceção do que realmente funciona. Às vezes, isso resulta em "fim inesperado da regra de filtro: mesclagem" e outras coisas. Eu os excluí por brevidade e porque acho que as versões acima estão mais próximas da correção (ele disse, nervosamente). Eu estou supondo que acabo passando muito poucos argumentos.
Obrigado antecipadamente!