In dieser guten Antwort wird darauf verwiesen , dass POSIX-Systeme cd
zusätzlich zur integrierten Shell eine externe Binärdatei haben. Unter OS X 10.8 ist es /usr/bin/cd
. Sie können es nicht wie das eingebaute Programm verwenden, cd
da es sofort nach dem Ändern des eigenen Arbeitsverzeichnisses beendet wird. Welchem Zweck dient es?
cd-command
command
posix
Kojiro
quelle
quelle
/usr/bin/cd
nur die integrierte Shell verfügen ./bin/cd
jedoch./bin/cd
noch/usr/bin/cd
.Antworten:
Dies dient in erster Linie dazu, sicherzustellen, dass die POSIX-Werkzeugkiste sowohl innerhalb als auch außerhalb einer Shell verfügbar ist (Informationen dazu finden Sie im POSIX-Grundprinzip ).
Denn
cd
, das ist nicht enorm nützlich , aber beachten Sie, dasscd
Verzeichnisse ändert aber auch andere Nebenwirkungen hat: es gibt einen Exit - Status , das bestimmen hilft , ob Sie in der Lage sind ,chdir()
auf das Verzeichnis oder nicht, und gibt eine nützliche Fehlermeldung zu erklären , warum können Sie nichtchdir()
wenn du nicht kannst.Beispiel:
Ein weiterer möglicher Nebeneffekt ist die automatische Bereitstellung eines Verzeichnisses.
Auf einigen wenigen Systemen sind die meisten externen Befehle für die Standard-Shell-Buildins als Symlink zu demselben Skript implementiert, das Folgendes ausführt:
Das heißt eine Shell starten und das eingebaute darin ausführen.
Einige andere Systeme (wie GNU) haben Dienstprogramme als echte ausführbare Befehle, die zu Verwirrungen führen können, wenn sich das Verhalten von der in der Shell eingebauten Version unterscheidet.
quelle
cd
Befehl verwenden. Dies kann hilfreich sein, um die Verfügbarkeit eines automountbaren Remote-Dateisystems zu überwachen, oder bevor Sie mit einem Dateisystem eine zeitkritische Aktion ausführen.Die Tatsache , ein nicht builtin Befehl cd verfügbar ist , ist im Wesentlichen auf die POSIX - Anforderung für alle regulären builtins durch die exec Familie Befehle aufrufbar sein
env
,find
,nice
,nohup
,time
undxargs
einige dieser Befehle auf die Tatsache kombiniert werden sich nicht als builtins umgesetzt.Das macht allerdings nicht viel Sinn,
cd
da es ziemlich sinnlos ist, es mit diesen Befehlen zu kombinieren. Hier sind mehr oder weniger haltbare Beispiele:quelle
break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unset
wären als externe Befehle irrelevant, währendcd
es sich um ein reguläres Buildin handelt, das einige dokumentierte Anwendungsfälle als Befehl enthält.Zusätzlich zur Überprüfung, ob ein Pfad einem zugänglichen Verzeichnis entspricht,
cd
verarbeitet und verwendet die ausführbare Datei dieCDPATH
Variable und gibt bei erfolgreicher Verwendung den absoluten Pfad des aufgelösten Verzeichnisses aus.Dies ist nur sehr gelegentlich nützlich, würde jedoch die Neuimplementierung derselben Logik für die Suche nach passenden Verzeichnissen ersparen. Ein konkreter Anwendungsfall besteht darin, das erste vorhandene Verzeichnis eines bestimmten Namens unter mehreren möglichen Eltern zu finden.
cd
auch ProzesseOLDPWD
fürcd -
, aber das ist weniger konkret sinnvoll, da die Umgebungsvariable bereits verfügbar wäre.quelle