-bash:!: evento não encontrado [fechado]

-2

Desejo remover todas as pastas e arquivos, exceto uma pasta chamada docs.

echo !(docs)

mas eu tenho -bash: !: event not found ?

Estou usando o terminal padrão do mac.

    
por Eunice Chia 15.07.2016 / 03:25

1 resposta

1

Você tem dois problemas:

  1. !(doc) é um glob estendido e extglob está desativado. Se o seu bash suporta extglob , você pode ativá-lo com:

    shopt -s extglob
    
  2. 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 o extogob e desativar a expansão do histórico :

$ 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.

    
por John1024 15.07.2016 / 06:08