Was ist $ PWD? (gegen aktuelles Arbeitsverzeichnis)

27

Wikipedia ( Link ) sagt mir also, dass der Befehl pwdfür "Arbeitsverzeichnis drucken" steht, und das macht Sinn.

Für die Umgebungsvariable muss das "P" jedoch ein Akronym für etwas anderes als print sein.

Ich höre Leute über "aktuelles Arbeitsverzeichnis" sprechen, was besser klingt und intuitiver ist, aber die Umgebungsvariable scheint immer noch $ PWD und nicht $ CWD zu heißen. Niemand sagt jemals "Haben Sie die Variable print working directory überprüft?".

Ich spiele gerade mit dem Webanwendungsserver uWSGI herum und er sagt mir beim Ausführen (auf der Seite mit den uWSGI-Statistiken):

"cwd":"/home/velle/greendrinks",

so mögen sie offensichtlich das (intuitivere Akronym) cwdvorbei pwd.

Ich denke, ich versuche herauszufinden, ob ich etwas missverstanden habe oder ob es nur darum geht, der Umgebungsvariablen einen nicht intuitiven Namen zu geben.

Mads Skjern
quelle
5
Arbeitsverzeichnis präsentieren?
DarioP
3
Ich vermute, du überdenkst es nur. $PWDist gleichbedeutend mit `pwd`, und das war Rechtfertigung genug.
andere
1
Noch eine Vermutung: Arbeitsverzeichnis bearbeiten?
oxfn

Antworten:

23

Das hängt davon ab, was Sie tun. Zuallererst $PWDist es eine Umgebungsvariable und pwdeine eingebaute Shell oder eine tatsächliche Binärdatei:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

Jetzt gibt die eingebaute Bash einfach den aktuellen Wert von aus, es $PWDsei denn, Sie verwenden das -PFlag. Wie erklärt in help pwd:

pwd: pwd [-LP]

    Gibt den Namen des aktuellen Arbeitsverzeichnisses aus.

    Optionen:

      -L
          Gibt den Wert aus, $PWD wenn er das aktuelle Arbeitsverzeichnis benennt
      -P
          Drucken Sie das physische Verzeichnis ohne symbolische Verknüpfungen

    Standardmäßig verhält sich 'pwd' so, als ob '-L' angegeben wäre.

Die pwdBinärdatei hingegen getcwd(3)ruft das aktuelle Verzeichnis über den Systemaufruf ab, der denselben Wert wie zurückgibt readlink -f /proc/self/cwd. Versuchen Sie zur Veranschaulichung, in ein Verzeichnis zu wechseln, das einen Link zu einem anderen enthält:

$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun  4 11:22 foo
lrwxrwxrwx 1 terdon terdon    4 Jun  4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo

So, zum Schluss, auf GNU - Systemen (wie Ubuntu), pwdund echo $PWDsind gleichwertig , wenn Sie die Verwendung -POption, aber /bin/pwdist anders und verhält sich wie pwd -P.

Quelle https://askubuntu.com/a/476633/291937

Thushi
quelle
1
@llua Nichts verbietet PWDes, eine Umgebungsvariable zu sein. Tatsächlich ist dies der Standardfall bei den meisten, wenn nicht allen Shells, und es ist sinnvoll, diese für untergeordnete Prozesse bereitzustellen.
Juli
1
Ich frage mich, warum die Leute abgestimmt haben, es scheint eine gute Antwort zu sein und es gründlich erklärt zu haben.
Mads Skjern
2
@MadsSkjern Die meisten integrierten Funktionen müssen nach dem POSIX-Standard auch als Befehle verfügbar sein. Auf diese Weise können Sie sie direkt aus anderen Programmen aufrufen, ohne eine Shell starten zu müssen.
Juli
2
Das beantwortet mir die Frage nicht wirklich. Die Frage bezieht sich nicht wirklich auf die Unterschiede zwischen $PWDund pwd(die bereits in U & L behandelt wurden, bevor ich glaube), sondern auf die Gründe, die zur Benennung der Variablen " PWD" geführt haben.
John WH Smith
1
@Thushi Du hast höchstwahrscheinlich recht. PWD wurde durch ksh88welches Dokument eingeführt : PWD The present working directory set by the cd command.Sie sollten dies Ihrer Antwort hinzufügen.
Juli
15

$ PWD ist die P athname des aktuellen W RBEITEN D irectory

Wenn symbolische Links vorhanden sind, kann dies zu unterschiedlichen Ergebnissen führen, vom Lesen von $ PWD bis zur Ausführung des Befehls pwd .

jcbermu
quelle
Können Sie ein Beispiel geben, wie Sie unterschiedliche Werte für $PWDund erhalten pwd?
Mads Skjern