Ich habe einen gemeinsamen Befehl, der aus ganz bestimmten Verzeichnissen heraus aufgerufen wird. Es gibt nur eine ausführbare Datei in / bin für dieses Programm, und das aktuelle Arbeitsverzeichnis ist sehr wichtig, um es korrekt auszuführen. Das Skript wirkt sich auf die Dateien aus, die sich in dem Verzeichnis befinden, in dem es ausgeführt wird.
Jetzt habe ich auch ein benutzerdefiniertes Shell-Skript, das einige Dinge in einem Verzeichnis ausführt, aber ich muss diesen oben erwähnten Befehl aufrufen, als wäre er in einem anderen Verzeichnis.
Wie macht man das in einem Shell-Skript?
bash
shell
working-directory
Marty Wallace
quelle
quelle
Antworten:
Zu diesem Zweck können Sie das
cd
eingebaute oder daspushd
undpopd
eingebaute verwenden. Beispielsweise:Sie verwenden die integrierten Funktionen wie jeden anderen Befehl und können den Verzeichniskontext beliebig oft in einem Skript ändern.
quelle
cd -
in einer POSIX-Shell, um zum vorherigen Verzeichnis zurückzukehren. Das heißt, (a)pushd
undpopd
sind wirklich für den interaktiven Gebrauch gedacht, und (b) es ist nicht immer sicher anzunehmen, dass Sie dorthin zurückkehren können,cd
wo Sie begonnen haben, insbesondere in komplexen Subsystemen, die intern möglicherweise restriktive Berechtigungen verwenden (siehe stackoverflow.com/questions/). 10555284 /… ).popd
.:
Symbol hier bedeutet?man bash
Lesungen:: [arguments]
Keine Wirkung; Der Befehl erweitert lediglich die Argumente und führt die angegebenen Umleitungen aus. Der Rückgabestatus ist Null.Verwendung
cd
in einer Unterschale; Die Kurzform für die Verwendung dieser Art von Unterschale sind Klammern.Wenn Ihr Befehl jedoch über eine Umgebung verfügt, die er benötigt, sollte er diese Umgebung selbst sicherstellen, anstatt alles zu belasten, was ihn verwenden möchte (es sei denn, es handelt sich um einen internen Befehl, der unter ganz bestimmten Umständen im Kontext eines Bohrlochs verwendet wird definiert ein größeres System, so dass jeder Anrufer bereits die Umgebung sicherstellen muss, die er benötigt). Normalerweise ist dies eine Art Shell-Skript-Wrapper.
quelle
\
nacheinander;
für mehrzeilige Befehle im selben Kontext einfügen .quelle
Wenn Sie zu Ihrem aktuellen Arbeitsverzeichnis zurückkehren möchten:
current_dir
gleich Ihrerpwd
cd
wo Sie Ihren Befehl ausführen müssencd
zu unserer Variablen zurückcurrent_dir
Eine andere Lösung von @apieceofbart
pushd && YOUR COMMAND && popd
quelle
pushd && YOUR COMMAND && pulld
popd
stattpulld
.