Unerwarteter Bash-Abschluss von ~ unter OS X

13

Ich drückte ~TabTabauf die Bash-Eingabeaufforderung und bekam eine unerwartete Reihe von Abschlüssen.

Zuerst sah es aus wie alle Leute im /UsersVerzeichnis und noch viel mehr.

Dann dachte ich, es wäre die umgekehrte Suche von Leuten mit "Heimat" -Verzeichnissen /etc/passwordoder vielleicht denjenigen, die es waren /var/empty- dies scheint ungefähr richtig zu sein.

Ich bin gespannt, was wirklich los ist und warum das so funktioniert.

Walt Steinbrenner
quelle

Antworten:

21

Ich habe kein OSX-System zur Hand, um ~fooes zu überprüfen, aber auf allen * Nixen, ist eine Abkürzung für das Home-Verzeichnis des Benutzers foo. Zum Beispiel wird dieser Befehl in den Ordner meines Benutzers verschoben $HOME( cd ~allein in Ihr Home-Verzeichnis):

cd ~terdon

Also, ~und Tabwird auf alle möglichen Benutzernamen erweitert. Die Liste sollte mit der Liste der Benutzer in identisch sein /etc/passwd.

Ich kann bestätigen, dass genau das passiert, wenn ich dies auf meinem Debian versuche.

terdon
quelle
Es ist dasselbe, wenn ich es unter FreeBSD ausprobiere.
Jenny D
Also warf mich das Ding, dass ich keine Verzeichnisse in / home für diese Benutzer hatte. Tatsächlich sagten viele / var / empty. Ich nahm an, dass solche Vervollständigungen über die Datenträgersuche vorgenommen wurden, sodass ~ das tatsächliche Ausgangsverzeichnis auf der Festplatte und nicht die Einträge / etc / passwd ansah. Da ~ wirklich "das Home-Verzeichnis eines Benutzers" und nicht wirklich eine Verknüpfung für / home (oder / User) bedeutet, verweist die Erweiterung in meinem OS X-Fall auf / var / empty. Etwas Neues gelernt! Vielen Dank!
Walt Stoneburner
Die Antwort von @WaltStoneburner fdo legt nahe, dass OSX etwas anderes macht, ich weiß es nicht. Unter Linux /homeist es jedoch unerheblich, ein Verzeichnis zu erstellen , in dem kein neuer Benutzername aufgeführt wird. Beachten Sie außerdem, dass sich nicht alle $ HOME-Dateien der Benutzer in /home(oder /Users) befinden.
terdon
@terdon - Ich denke, Sie haben es mit Ihrer Antwort geschafft. Auf meinem Linux-Konto habe ich einen Benutzer, der ein falsches Verzeichnis von / nonexistent hat. Es wird in der Autovervollständigung angezeigt, aber der Befehl cd schlägt fehl (wie erwartet).
Walt Stoneburner
2

Ich dachte, es wäre die umgekehrte Suche von Leuten mit "Heimat" -Verzeichnissen in / etc / password.

Unter OS X wird Open Directory anstelle von / etc / passwd verwendet.

fd0
quelle
1

Das Bash-Referenzhandbuch sagt :

Bash versucht, den Text als Benutzernamen zu behandeln (wenn der Text mit "~" beginnt)

Bash verwendet die getpwent Funktion zur Vervollständigung.

man getpwent Unter OSX heißt es:

Diese Funktionen beziehen Informationen aus opendirectoryd (8), einschließlich Datensätzen in /etc/master.passwd, die in master.passwd (5) beschrieben sind.

Evgeny Vereshchagin
quelle