Eu estava tentando copiar um diretório local com exceções para outro local dentro de um script Bash e continuava recebendo uma mensagem de erro de sintaxe. Acabei com um exemplo mínimo que replica meu problema... o que só acontece de dentro de uma função.
Então isso funciona como esperado:
#!/usr/bin/env bash
rm -rf /tmp/adir/ && mkdir --parents /tmp/adir/
shopt -s extglob dotglob
cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir/
shopt -u extglob dotglob
...mas isso não funciona:
#!/usr/bin/env bash
a_function() {
rm -rf /tmp/adir && mkdir --parents /tmp/adir
shopt -s extglob dotglob
cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir
shopt -u extglob dotglob
}
a_function
O último gera um erro de sintaxe:
./test.sh: line 6: syntax error near unexpected token `('
./test.sh: line 6: ` cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir/'
Versão Bash: GNU bash, versão 5.2.15(1)-release (x86_64-pc-linux-gnu)
Espero que alguém possa ajudar.