Eu posso ficar? e .. de. * expansão?

10

Costumo achar irritante (ou pior) quando digito

command .*

no bash e o comando se aplica ao diretório pai e ao diretório atual. Existe alguma opção de shell ou outra configuração que eu possa ajustar para excluir o bash .e ..da expansão .*?

David Z
fonte

Respostas:

13

No bash, nesta ordem:

GLOBIGNORE=.
shopt -u dotglob

Quando GLOBIGNORE está definido,. e .. são automaticamente ignorados; portanto, você não precisa defini-los em GLOBIGNORE, mas se você não tiver mais nada a ignorar, não terá nada para defini-lo.

Toda vez que você define GLOBIGNORE como um valor não nulo, o bash ativa a opção dotglob; portanto, você precisará desativá-la posteriormente; caso contrário, o bash será expandido *para incluir arquivos que começam com um ponto.

camh
fonte
Legal, obrigado! Na verdade, eu preferia ter dotglobligado, então a definição GLOBIGNOREparece perfeita.
David Z
Quando GLOBIGNORE está definido, o Bash ignora .e ..mas não foo/.e foo/... Você pode usar GLOBIGNORE=.:*/.:*/..para fazer isso funcionar também com nomes de caminhos.
user123444555621
3

Em um sistema desconhecido em que tenho pouco tempo para verificar as configurações em uso (como GLOBIGNORE), uso o seguinte padrão infalível:

command .??*
  • Rápido para digitar e com garantia de exclusão .e ..independentemente do ambiente.
Alexander Shcheblikin
fonte
11
Eu sempre gostei dessa abordagem, mas estar ciente de que ele não consegue corresponder arquivos 1 char-.a
MestreLion