Conclusão de Bash inesperada de ~ no OS X

13

Eu pressionei ~ Tab Tab no prompt de comando do bash e recebi um conjunto inesperado de conclusões.

Primeiro, pareciam todas as pessoas no diretório /Users e muito mais.

Então eu pensei que estava fazendo a pesquisa reversa de pessoas com diretórios "caseiros" em /etc/password , ou talvez os que eram /var/empty - isso parece certo.

O que eu estou curioso sobre o que é realmente acontecendo e por que isso funciona como funciona.

    
por Walt Stoneburner 27.05.2015 / 00:59

3 respostas

21

Eu não tenho um sistema OSX à mão para verificar, mas em todos os * nixes, ~foo é uma abreviação para o diretório home do usuário foo . Por exemplo, este comando passará para o meu usuário $HOME ( cd ~ sozinho passará para seu diretório pessoal):

cd ~terdon

Portanto, ~ e Tab serão expandidos para todos os nomes de usuários possíveis. A lista deve ser a mesma da lista de usuários em /etc/passwd .

Eu posso confirmar que isso é exatamente o que acontece quando eu tento isso no meu Debian.

    
por 27.05.2015 / 01:16
2

I thought it was doing the reverse lookup of folks with "home" directories in /etc/password.

No OS X Open Directory é consultado em vez de / etc / passwd.

    
por 27.05.2015 / 14:00
1

Manual de Referência da Bash diz :

Bash attempts completion treating the text as username (if the text begins with ‘~’)

Bash usa getpwent função para conclusão.

man getpwent no OSX diz:

These functions obtain information from opendirectoryd(8), including records in /etc/master.passwd which is described in master.passwd(5).

    
por 29.06.2015 / 21:06