Você tem dois problemas:
-
!(doc)
é um glob estendido eextglob
está desativado. Se o seu bash suportaextglob
, você pode ativá-lo com:shopt -s extglob
-
A expansão do histórico está ativada. Para desligar, execute
set -H
A expansão do histórico faz com que coisas surpreendentes aconteçam quando
!
é usado. Se você não usar a expansão do histórico, poderá evitar surpresas desativando-a.
Exemplo
Vamos considerar um diretório com esses arquivos:
$ ls
docs file1 file2
Agora, vamos desativar o extglob e o histórico em e executar o seu comando:
$ shopt -u extglob; set -H
$ echo !(docs)
bash: !: event not found
Esta é exatamente a mensagem de erro que você relatou. Assim, esta parece ser a sua situação.
Agora, vamos manter
$ shopt -u extglob; set +H
$ echo !(docs)
bash: syntax error near unexpected token '('
Esse erro é diferente daquele que você relatou. Esta não é a sua situação.
Por fim, vamos executar o seu comando com extglob on . Para completar, tentaremos expandir a história em ambas as configurações:
$ shopt -s extglob; set +H
$ echo !(docs)
file1 file2
$ shopt -s extglob; set -H
$ echo !(docs)
file1 file2
Ambos funcionam. Assim, desde que o seu shell suporte extglob e esteja ativado, seu comando deve funcionar.