Ich habe 'Verzeichnis ändern' in meinem Shell-Skript verwendet (Bash)
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
wird some_place
korrekt gedruckt , aber nach Abschluss des Skripts ändert sich mein aktuelles Arbeitsverzeichnis nicht.
Ist es möglich, meinen Pfad per Skript zu ändern?
Antworten:
Sie müssen die Datei wie folgt beziehen:
oder
source myfile.sh
Ohne Sourcing werden die Änderungen in der Sub-Shell und nicht in der übergeordneten Shell vorgenommen, die das Skript aufruft. Wenn Sie jedoch eine Datei als Quelle angeben, werden die Zeilen in der Datei so ausgeführt, als ob sie in der Befehlszeile eingegeben worden wären.
quelle
Das Skript wird in einer separaten Subshell ausgeführt. Diese Subshell ändert das Verzeichnis und nicht die Shell, in der Sie sie ausführen. Eine mögliche Lösung besteht darin,
source
das Skript zu verwenden, anstatt es auszuführen :# Bash source yourscript.sh # or POSIX sh . yourscript.sh
quelle
Während die Beschaffung des Skripts, das Sie ausführen möchten, eine Lösung darstellt, sollten Sie sich bewusst sein, dass dieses Skript dann die Umgebung Ihrer aktuellen Shell direkt ändern kann. Es ist auch nicht mehr möglich, Argumente zu übergeben.
Eine andere Möglichkeit besteht darin, Ihr Skript als Funktion in bash zu implementieren.
function cdbm() { cd whereever_you_want_to_go echo arguments to the functions were $1, $2, ... }
Diese Technik wird von Autojump verwendet: http://github.com/joelthelion/autojump/wiki , um Ihnen Lesezeichen für das Shell-Verzeichnis zu vermitteln.
quelle
Dies kann durch Beschaffung erreicht werden. Beim Sourcing wird das Skript im Wesentlichen in derselben Shell ausgeführt, während bei normaler Ausführung (
sh test.sh
oder./test.sh
) eine Sub-Shell erstellt und das Skript dort ausgeführt wird.test.sh
cd development/ ls # Do whatever you want.
Ausführen
test.sh
vonsource test.sh
.
ist die kürzeste Notation fürsource
. So können Sie auch durch tunDadurch wird das Skript ausgeführt und das Verzeichnis der aktuellen Shell in geändert
development/
.quelle
Wenn Sie ein Skript in Ihrer Login-Shell ausführen, wird ein neuer Unterprozess erzeugt und die Skriptausführung in einer Subshell ausgeführt. Sobald das Skript abgeschlossen ist, wird die Subshell beendet und Sie kehren zur Login-Shell zurück Skript wird das Verzeichnis in den von cd angegebenen Pfad geändert. Nach Abschluss des Skripts kehren Sie jedoch zu Ihrer Anmeldeshell zu dem Arbeitsverzeichnis zurück, von dem aus Sie das Skript gestartet haben.
Der Weg, um dies zu überwinden, ist Verwendung,
source yourscript.sh
Die Quelle führt das Skript als TCL-Skript aus, dh es hat den gleichen Effekt wie bei der Eingabe jeder Zeile in der Befehlszeile Ihrer Anmeldeshell und der Ausführung von dort. Auf diese Weise bleibt das Skript nach Abschluss der CD in diesem Verzeichnis.
quelle