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 "~ /"?

Sam Liao
quelle
mögliches Duplikat von Was macht das kleine Schnörkel ~ unter Linux?
Wuffers

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.

kmarsh
quelle
15

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

igustin
quelle
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 .

LiraNuna
quelle
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
1

Bash Hackers Wiki - Dokumentation - Tilde-Erweiterung :

Die Tilde-Erweiterung wird zum Erweitern auf mehrere bestimmte Pfadnamen verwendet:

  • Home-Verzeichnisse
  • aktuelles Arbeitsverzeichnis
  • vorheriges Arbeitsverzeichnis
Timothy Pratley
quelle
-3

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

Henrik
quelle