porque “ls * bash *” não mostra o arquivo .bashrc [duplicado]

0

Eu gravei meu diretório pessoal e digitei

ls *bash*

esperando que mostre uma lista de arquivos contendo "bash". Porém não é.

Enquanto digita

ls .bash*

funciona.

De acordo com a documentação, * significa qualquer caractere, certo? Mas parece que não representa . neste caso. O que está errado?

    
por user15964 26.03.2016 / 09:53

3 respostas

7

A opção dotglob shell controla isso:

$ shopt -s dotglob
$ ls *bash*
.bash_history  .bash_logout  .bashrc

Ele não está habilitado por padrão, provavelmente como uma medida de usabilidade / segurança, já que a maioria dos usuários finais não precisa se preocupar com dotfiles e pode facilmente excluir arquivos críticos de diretório inicial (como .config , .ssh ) por acidente.

    
por 26.03.2016 / 10:01
1

A maioria das shells não fará com que o caractere "*" corresponda ao inicial "." caractere por razões históricas (por exemplo, arquivos que começam com "." são considerados ocultos e "." & ".." referem-se a diretórios)

Por isso, ls não mostrará .bashrc, mas ls -a mostrará todos os arquivos. Da mesma forma, ls * será expandido em todos os arquivos, exceto aqueles que começam com um "." personagem.

Altere este comportamento com shopt -s dotglob , que informa que "*" também deve corresponder ao inicial "." personagem. Depois disso, ls * mostrará .bashrc também.

    
por 26.03.2016 / 10:03
1

O motivo é que um ponto inicial é a convenção para "arquivo oculto" e globalização de arquivo (que é o nome para o uso de * como "qualquer número de caracteres" e ? como "qualquer um" caractere "e alguns outros) especificamente exclui um ponto principal porque significa" arquivo oculto ".

Se você escrever ls -l .* , você corresponderá a .bashrc , mas também corresponderá aos arquivos ocultos especiais . e .. , que são diretórios, portanto, para mostrar arquivos ocultos, você precisará de algo ao longo destas linhas: / p>

  • ls -ld .*
  • ls -l .[^.]*
  • ls -A | grep bash

ls -A *bash* não mostrará .bashrc porque a globalização de arquivos é feita antes da opção -A entrar em vigor.

Se você quiser mudar a forma como o arquivo globbing funciona com arquivos ocultos, você pode executar shopt -s dotglob , apenas no shell para teste, ou colocar em seu .bash_profile ou .bashrc para que ele seja sempre efetivo.

    
por 26.03.2016 / 10:08