Completamento imprevisto di Bash di ~ su OS X


13

Ho premuto ~TabTabsul prompt dei comandi di bash e ho ottenuto una serie inaspettata di completamenti.

Prima sembrava che tutte le persone nella /Usersdirectory, e molto di più.

Poi ho pensato che stesse facendo la ricerca inversa della gente con directory "home" /etc/password, o forse quelle che erano /var/empty- questo sembra giusto.

Ciò di cui sono curioso è ciò che sta realmente succedendo e perché funziona così.

Risposte:


21

Non ho a portata di mano un sistema OSX da controllare ma su tutti i * nix, ~fooè una scorciatoia per la home directory dell'utente foo. Ad esempio, questo comando si sposterà nel mio utente $HOME( cd ~solo si sposterà nella tua home directory):

cd ~terdon

Quindi, ~e Tabsi espanderà a tutti i possibili nomi utente. L'elenco dovrebbe essere uguale all'elenco degli utenti in /etc/passwd.

Posso confermare che è esattamente quello che succede quando provo questo sul mio Debian.


È lo stesso quando lo provo su FreeBSD.
Jenny D,

Quindi la cosa che mi ha lanciato è che non avevo directory in / home per quegli utenti. In effetti, molti hanno detto / var / empty. Ho pensato che tali completamenti fossero dovuti alla ricerca del disco, quindi ~ avrebbe cercato la directory home effettiva sul disco anziché le voci / etc / passwd. Poiché ~ significa veramente "home directory dell'utente" e non in realtà un collegamento per / home (o / User), i riferimenti di espansione / var / empty nel mio caso OS X. Ho imparato qualcosa di nuovo! Grazie!
Walt Stoneburner,

La risposta di @WaltStoneburner fdo di seguito suggerisce che OSX sta facendo qualcosa di diverso, non lo so. Su Linux, comunque, la creazione di una directory in /homeè irrilevante, il che non farà elencare un nuovo nome utente. Inoltre, tieni presente che non tutti i $ HOME degli utenti sono in /home(o /Users).
terdon

@terdon - Penso che tu l'abbia inchiodato con la tua risposta. Sul mio account Linux ho un utente dovenull che ha una directory fasulla di / inesistente, si presenta nel completamento automatico, ma il comando cd fallisce (come previsto).
Walt Stoneburner,

2

Pensavo stesse facendo la ricerca inversa di persone con directory "home" in / etc / password.

Su OS X viene consultata Open Directory anziché / etc / passwd.


1

Il manuale di riferimento di Bash dice :

Bash tenta di completare il trattamento del testo come nome utente (se il testo inizia con '~')

Bash utilizza la getpwent funzione per il completamento.

man getpwent su OSX dice:

Queste funzioni ottengono informazioni da opendirectoryd (8), inclusi i record in /etc/master.passwd che è descritto in master.passwd (5).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.