Eu posso executar este comando no meu prompt de linha de comando:
cp -r folder/!(exclude-me) ./
Copiar recursivamente todo o conteúdo, folder
exceto o subdiretório nomeado exclude-me
no diretório atual. Isso funciona exatamente como pretendido. No entanto, eu preciso que isso funcione em um script bash que eu escrevi, onde eu tenho o seguinte:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Mas quando eu executo o script:
bash my-script.sh
Eu entendi isso:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
E não sei por que ele funciona no prompt de comando, mas a mesma linha exata não funciona em um script bash.
bash
shell-script
nzifnab
fonte
fonte
env > file1
no script e execute./it
, e entãoenv > file2
esource it
, na esperança de que eu tivesse encontrado uma diferença noenv
s, o que não é o caso. Como posso listar programaticamente toda a diferença entre duas conchas (nesse caso, interativas versus não interativas)?Adicione esta linha na parte superior do seu script:
!(...)
é um recurso estendido de correspondência de padrões, é necessárioextglob
ativar a opção. Veja shopt builtin para mais detalhes.fonte