Ich habe einen Ordner mit dem Namen nach ~kernel-ppa
innen ~/Downloads
.
aditya@aditya-desktop:~$ cd Downloads/
aditya@aditya-desktop:~/Downloads$ ls
~kernel-ppa
Wenn ich jetzt für die automatische Erweiterung tippe cd ~k
und drücke Tab, wird sie von der Shell erweitert, cd ~kernoops/
anstatt cd ~kernel-ppa/
dass der Ordner mit denselben Startzeichen bereits vorhanden ist.
Damit die automatische Erweiterung funktioniert, muss ich sie umgehen \
. Wenn cd \~k
Sie also Tabrichtig verwenden und drücken, wird es erweitert cd \~kernel-ppa/
. Auch das Verwenden cd \
und Drücken Tabreicht aus.
Warum ist es so und warum muss ich fliehen? Was entkomme ich außerdem, da ~
es für die automatische Erweiterung nicht einmal erforderlich ist?
Wenn ich mit dem Fluss gehe und renne cd ~kernoops/
und drücke Enter, ändert sich der Terminalstatus zu //
:
aditya@aditya-desktop:~/Downloads$ cd ~kernoops/
aditya@aditya-desktop://$ pwd
//
aditya@aditya-desktop://$ ls
bin cdrom etc initrd.img lost+found mnt proc run srv tmp var
boot dev home lib media opt root sbin sys usr vmlinuz
aditya@aditya-desktop://$
Dies sieht aus wie das /
Verzeichnis, pwd
sagt es aber //
. Was genau ist das?
quelle
tree
oder mit an,ls
und Sie werden feststellen, dass dies zufällig der erste Unterordner ist.~kernel-ppa
der einzige Ordner darin ist; Wenn ich nur rennecd
und die Tabulatortaste drücke, wird es auf erweitertcd \~kernel-ppa/
. Ich muss auch nicht fliehen!Antworten:
Wie Sie wissen, wird es
~
in Ihr Home-Verzeichnis erweitert. Was Sie jedoch vermisst zu haben scheinen, ist die~john
Erweiterung auf das Home-Verzeichnis des Benutzers mit dem Namen "john".Überprüfen Sie Ihre
/etc/passwd
Datei:Es hat einen "Systembenutzer" namens
kernoops
(aus Gründen der internen Fehlerberichterstattung). Wenn Sie alsocd ~k
Tabdie Shell eingeben, wird die Erweiterung des Benutzernamens vor der Erweiterung der lokalen Verzeichnisse bevorzugt (1), und Sie habencd ~kernoops
. Jetzt ergibt sich, dass Benutzer "Kernoops" Home-Verzeichnis ist/
, also ist escd
dazu.In meiner Shell habe
zsh
ich keinen doppelten Schrägstrich (2):Abgesehen davon ist dieser Verzeichnisname nicht gut durchdacht. Es wird dreifache Sorgfalt in Skripten und was auch immer erfordern. Die einzig schlimmste Idee, die ich mir vorstellen kann, ist das Einbetten eines Tabs ...
Fußnoten:
(1) In
zsh
, selbst wenn ich ein Verzeichnis mit dem Namen habe~xdir
und kein Benutzer mit beginntx
; Doing erweitertcd ~x
Tabsich nicht und zitiert nicht den~
gibt Fehler:(2) Ich scheine mich zu erinnern, dass posix eine Ausnahme für die Initiale
//
in einem Pfad gemacht hat - es sollte beibehalten werden, da eine alte Unix-Variante (ich habe die Apollo mit Domain / OS verwendet, die diese hatte) für//machine-name/...
den nahtlosen Zugriff auf andere Computer verwendet wurde. Dateisystem im lokalen Netzwerk (Sicherheit wurde noch nicht erfunden). Also ist Bash wahrscheinlich genau hier. Wenn Sie dies tun, habencd ///
Sie jedoch das Normal/
in beiden Shell.Ja, auf unix.se gefunden !
quelle
Das Tilde-Zeichen (
~
) hat in der Shell eine besondere Bedeutung. Wenn es in einem Befehl angezeigt wird, wird es auf den Namen Ihres Home-Verzeichnisses erweitert. Wenn Sie dies tuncd ~
odercd /home/aditya
dasselbe tun , landet es in Ihrem Home-Verzeichnis.Indem Sie ein Backslash-Zeichen (
\
) vor die Tilde setzen, weisen Sie die Shell an, die Erweiterung des folgenden Sonderzeichens nicht durchzuführen (dies wird als Shell-Escape bezeichnet). Wenncd \~
Sie dies tun , bitten Sie die Shell, in ein Verzeichnis mit dem Namen zu wechseln~
, das sich unter dem Verzeichnis befindet, in dem Sie den Befehl ausführen. Wenn Sie dies tuncd \~kernel-ppa
, wechseln Sie in das Verzeichnis namens~kernel-ppa
, was das normale Verhalten ist.EDITIERT: mehr zu ~
Wenn Sie nach dem einen Benutzernamen Ihres Systems schreiben
~
, werden Sie in das Ausgangsverzeichnis dieses Benutzers verschoben. Wenn Sie danach eine TabErweiterung durchführen,cd ~
werden die auf Ihrem System vorhandenen Benutzernamen erweitert. Wenn der Vorgang Tabdanach abgeschlossen istcd ~k
, wird er auf ~ kernoops erweitert, da der Systembenutzer einen Benutzer mit dem Namen kernoops mit dem Basisverzeichnis von enthält/
. Wenn die Erweiterung dercd ~k
Ergebnisse zucd ~kernoops/
einem abschließenden Schrägstrich führt und das Home-Verzeichnis angezeigt wird/
, werden Sie zu verschoben//
. Dies ist jedoch genau das Gleiche/
wie einige andere bereits zuvor gesagt haben.quelle