$PWD vs pwd bezüglich Portabilität
Ich Schreibe ein shell-Skript, das analysiert den Pfad des aktuellen Arbeitsverzeichnis (drucken, wie alle Basisnamen auf das über dem aktuellen Verzeichnis).
So weit, ich habe mit der Umgebungsvariable PWD
zu analysieren Weg, aber ich Frage mich, ob
- Auf die ich zählen kann
PWD
werden immer - zu geben, die dasselbe Ergebnis auf jeder Plattform
Wäre es eventuell besser sein, auf die pwd
shell-builtin? Ich brauche dieses Skript ausführen, auf so vielen Plattformen wie möglich, so dass ich nur gefragt...
Du musst angemeldet sein, um einen Kommentar abzugeben.
POSIX erfordert
$PWD
in der folgenden Weise:So können Sie sich darauf verlassen, dass festgelegt wird – aber beachte "... ein absoluter Pfad...", nicht die absoluten Pfad.
bash
(zumindest neuere Versionen) werden sich daran erinnern, was symlinks gefolgt Sie bei der Einstellung$PWD
(und diepwd
builtin).command pwd
(das ist der externe Befehl) nicht. So erhalten Sie andere Ergebnisse, die möglicherweise oder möglicherweise nicht für Sie wichtig sein. Verwendenpwd -P
wenn Sie möchten, dass ein Pfad ohne symlinks.Beachten Sie, dass die
pwd
Dokumentation besagt:So, tun Sie das nicht 🙂
Kurz gesagt, es gibt keine Gewinner hier. Die Umgebungsvariable wird es in POSIX-shells, wie der externe Befehl und ggf. einen eingebauten auch. Wählen Sie die eins, die am besten zu Ihrem Bedarf passt, ist die wichtige Sache ist, ob Sie kümmern sich um symlinks oder nicht.
Aus, dass die forum Artikel, "$PWD vs `pwd`" vergleicht AIX 4.2.1, AIX 6, Sparc Solaris 10 und Redhat 5 Unternehmen mit diesem Hinweis:
gibt es keinen Unterschied zwischen $PWD und builtin pwd,
gibt es keinen Unterschied zwischen builtin pwd -P " und " /usr/bin/pwd.
Den ehemaligen zeigt Arbeitsverzeichnis mit dem Namen des symbolischen links in der Erwägung, dass die letztere zeigt aktuellen Pfad.
Die einzige Diskrepanz ist, dass das externe Kommando in /usr/bin in den meisten Systemen und /bin in Redhat.
Wenn Sie wissen, dass die bash ist vorhanden, und das Skript wird ausgeführt, mit
PWD
ist sicher.Wenn, auf einigen Systemen, die nur plain-sh verfügbar ist, verwenden Sie
pwd
.Wenn es nach mir ginge, würde ich die Verwendung
pwd
da es einen eingebauten sowohl für die bash und sh. Das bedeutet nicht, dass Sie funktionieren identisch in jeder Hinsicht, aber wenn Sie aufrufen, es ohne Optionen, dass sollte keine Rolle spielen.Ein weiterer Punkt zu beachten ist
Kommando-Substitutionen sind in der Regel nicht sicher auf trailing
Zeilenumbrüche .
Dies ist natürlich ziemlich konstruiert, aber wenn Sie wirklich besorgt über sicher
Umgang mit input, den Sie verwenden sollten
"$PWD"
. Siehe zum Beispiel:Ist es möglich zu arbeiten, um die Kommando-substitution ist es aber keineswegs
ziemlich. Sie können den anfügen eines trailing-Zeichen und dann Streifen Sie mit einer
parameter Erweiterung:
Dies ist besonders hässlich, weil Sie dann auch noch mit Streifen, der Zeilenumbruch, die
pwd
hinzufügt, die normalerweise getrennt wurden und durch den Befehl ersetzen.Das wird ein totales Chaos, wenn Sie nicht resort, um nicht-POSIX-Konstrukte wie
$''
, so dass im Grunde, verwenden Sie einfach"$PWD"
wenn Sie sich sorgen über diese Dinge. Natürliches ist durchaus sinnvoll, nur eben nicht unterstützen nachfolgende Zeilenumbrüche im Verzeichnis
Namen.