Was ist das Verzeichnis "~ /"?


6

Vielleicht nicht programmierbezogen, aber ich möchte dieses Verzeichnis in c program referenzieren.

Ich dachte, es ist $ HOME, aber wenn ich $ HOME deaktiviere, kann ich immer noch cd ~ / in bash.

Es ist auch nicht das Haus von $ USER, da ich mit USER = "another" root sein kann, aber das "~ /" zeigt immer noch auf "/ root".

Wie erklärt Bash dieses "~ /"?


Antworten:


2

Vielleicht nicht programmierbezogen, aber ich möchte dieses Verzeichnis in c program referenzieren.

Wenn Sie versuchen, das String-Literal "~ /" in C zu öffnen, werden Sie feststellen, dass es nicht existiert. Es handelt sich um eine Bash / Csh-Kurzschreibweise, die von der Shell in das Ausgangsverzeichnis erweitert wird. Es existiert nicht als solches im Dateisystem und daher schlägt ein C-Programm fehl, es sei denn, es ruft beispielsweise Bash auf und ermöglicht Bash, die Zeichenfolge zu erweitern.


15

Verwenden der Home-Verzeichnis-Informationen aus / etc / passwd (6. Feld).


4
Nein, tu das nicht. Verwenden Sie (in der Shell) getent passwd oder in C getpwent (3). Beides gelingt auf NIS- oder LDAP-Systemen, auf denen / etc / passwd fehlschlägt.
kmarsh

2

Es ist $HOME, aber es ist Wert zu ändern nicht Expansion bewirken. Weitere Informationen finden Sie unter diesem Link .


Das Ändern des Werts wird durchgeführt, das Deaktivieren jedoch nicht. Wenn $ HOME nicht gesetzt ist, setzt bash es beim Expandieren ~, wie durch Ausführen von strace echo ~ überprüft werden kann. Auf Cygwin sehe ich diese Zeile: 79 56614 [main] echo 2380 cygheap_user :: ontherange: Set HOME (von / etc / passwd) to / cygdrive / g
reinierpost


-3

~ wird von der Shell als Ausgangsverzeichnis interpretiert. es ist ein "Schlüsselwort"

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.