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.

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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.