Ich schreibe ein Shell-Skript, das den Pfad des aktuellen Arbeitsverzeichnisses analysiert (ein Like aller Basisnamen oberhalb des aktuellen Verzeichnisses).
Bisher habe ich die Umgebungsvariable PWD
verwendet, um den Pfad zu analysieren, aber ich frage mich, ob
PWD
immer gesetzt ist Wäre es möglicherweise besser, die pwd
shell-builtin zu verwenden? Ich brauche dieses Skript, um auf so vielen Plattformen wie möglich zu laufen, also habe ich mich nur gefragt ...
POSIX erfordert, dass $PWD
auf folgende Weise gesetzt wird:
%Vor%Diese Variable soll einen absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses darstellen. Es darf keine Punkte oder Punkte enthalten. Der Wert wird durch das Dienstprogramm cd und durch das Dienstprogramm sh während der Initialisierung festgelegt.
Sie können sich also darauf verlassen, dass das gesetzt wird - aber notieren Sie "... einen absoluten Pfad ...", nicht den absoluten Pfad.
bash
(zumindest die letzten Versionen) werden sich daran erinnern, welche symbolischen Links Sie beim Festlegen von $PWD
(und% pwd
builtin) befolgt haben. command pwd
(dh der externe Befehl) wird nicht. So erhalten Sie dort unterschiedliche Ergebnisse, die für Sie wichtig sein könnten oder auch nicht. Verwenden Sie pwd -P
, wenn Sie einen Pfad ohne Symlinks wünschen.
Beachten Sie, dass in der pwd
-Dokumentation Folgendes steht:
Wenn eine Anwendung den Wert von PWD setzt oder nicht setzt, ist das Verhalten von pwd nicht spezifiziert.
Also, tu das nicht:)
Kurz gesagt, hier gibt es keinen Gewinner. Die Umgebungsvariable wird in POSIX-Shells vorhanden sein, ebenso wie der externe Befehl und möglicherweise auch eine eingebaute Variable. Wählen Sie diejenige aus, die am besten zu Ihnen passt, wobei es wichtig ist, ob Sie sich für symbolische Links interessieren oder nicht.
Aus diesem Artikel im Forum "$ PWD vs 'pwd'" , der AIX 4.2.1, AIX vergleicht 6, Sparc Solaris 10 und Redhat 5 Enterprise in dieser Hinsicht:
Es gibt keinen Unterschied zwischen $ PWD und eingebautem Pwd,
Es gibt keinen Unterschied zwischen eingebautem pwd -P und / usr / bin / pwd.
Ersteres zeigt das Arbeitsverzeichnis mit den Namen der symbolischen Links, während letzteres den tatsächlichen Pfad anzeigt.
Die einzige Diskrepanz besteht darin, dass sich der externe Befehl in den meisten Systemen in / usr / bin und in Redhat / bin befindet.
Wenn Sie wissen, dass bash verfügbar ist und das Skript damit ausgeführt wird, ist PWD
sicher.
Wenn auf einigen Systemen nur einfaches sh verfügbar ist, verwenden Sie pwd
.
Wenn ich es wäre, würde ich pwd
verwenden, da es sowohl für bash als auch für sh integriert ist. Das bedeutet nicht, dass sie in jeder Hinsicht identisch funktionieren, aber wenn Sie sie ohne Optionen aufrufen, sollte das keine Rolle spielen.
Tags und Links bash