Finalización inesperada de Bash ~ en OS X

Presioné ~ Tab Tab en el símbolo del sistema bash y obtuve un set inesperado de terminaciones.

Primero se parecía a todas las personas en el directory /Users y mucho más.

Entonces pensé que estaba haciendo la búsqueda inversa de gente con directorys "home" en /etc/password , o quizás los que eran /var/empty – esto parece correcto.

Lo que me interesa es lo que realmente está pasando y por qué funciona así.

Solutions Collecting From Web of "Finalización inesperada de Bash ~ en OS X"

No tengo un sistema OSX a mano para verificar, pero en todos * nixes, ~foo es una abreviatura del directory de inicio del usuario foo . Por ejemplo, este command se moverá a $HOME mi usuario ( cd ~ solo se moverá a su directory de inicio):

 cd ~terdon 

Entonces, ~ y Tab se expandirán a todos los posibles nombres de usuario. La list debe ser la misma que la list de usuarios en /etc/passwd .

Puedo confirmar que eso es exactamente lo que sucede cuando pruebo esto en mi Debian.

Pensé que estaba haciendo la búsqueda inversa de gente con directorys "home" en / etc / password.

En OS X Open Directory se consulta en lugar de / etc / passwd.

El manual de reference de Bash dice :

Bash intenta completar el tratamiento del text como nombre de usuario (si el text comienza con '~')

Bash usa la function getpwent para completarla.

man getpwent con OSX dice:

Estas funciones obtienen información de opendirectoryd (8), incluidos los loggings en /etc/master.passwd que se describen en master.passwd (5).