In meiner Bash-Datei habe ich darum gebeten, zu einem Unterverzeichnis zu navigieren, eine Datei zu entpacken und dort zu bleiben, aber wenn ich pwd eingebe, kann ich sehen, dass ich immer zu meinem Heimatverzeichnis zurück bin. Warum ?
Gibt es eine Möglichkeit, Shell Stick auf Subdir zu bekommen?
linux
bash
shell-script
heavyyd
quelle
quelle
Antworten:
Wenn Sie ein Skript ausführen, wird eine neue Subshell dafür geöffnet, wodurch die Umgebungsvariablen (einschließlich Ihres Arbeitsverzeichnisses: $ PWD) der Shell, in der Sie sich befinden, nicht geändert werden. Wenn Sie möchten, dass das Skript in derselben Shell wie Sie ausgeführt wird Dadurch werden die Änderungen der Umgebungsvariablen beibehalten und nicht ausgeführt, sondern als Quelle verwendet. So was:
oder:
Dies lässt jedoch jede temporäre Variable zurück, die Ihr Skript verwendet. Wenn Sie dies vermeiden möchten, erstellen Sie eine Funktion innerhalb des Skripts und deklarieren Sie alle temporären Variablen als lokal. So was:
Wenn dies mit aufgerufen
source
wird, bleiben alle Variablenänderungen wie im Arbeitsverzeichnis, jedoch keine temporären Variablen zurück.quelle
Beim Ausführen eines Skripts wird es in einem separaten Prozess ausgeführt. Änderungen am Arbeitsverzeichnis, an den Umgebungsvariablen usw. gehen beim Beenden des Skripts verloren.
Um das Skript im aktuellen Bash-Prozess auszuführen, müssen Sie das Skript als Quelle verwenden
quelle
Ja, Sie können hierfür eine Funktion erstellen. Erstellen Sie zunächst ein Skript, das die ganze schwere Arbeit erledigt.
Dann erstelle eine Funktion in .bashrc wie folgt:
Im Gegensatz zu ganzen Skripten werden Funktionen im Kontext der aktuellen Shell ausgeführt.
In den BASH-FAQ finden Sie eine Erklärung .
quelle
Ihr Bash-Skript erbt eine Kopie der Umgebung der aufrufenden Shell (Arbeitsverzeichnis, Shell-Variablen usw.), die beim Beenden des Skripts verworfen wird. Wenn Sie Shell-Variablen testen, indem Sie z. B. "echo $ foo" eingeben, behalten sie den Wert bei (oder sind nicht vorhanden), den sie vor dem Ausführen des Skripts hatten, genau wie pwd.
quelle