Wenn ich in einem Skript das Arbeitsverzeichnis ändere und es ausführe, ändert sich das Arbeitsverzeichnis nur im Skript zum angegebenen Pfad. Hier ist mein Skript: (damit wollte ich sicherstellen, dass es tatsächlich das Verzeichnis geändert hat)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd
Wenn ich es ausführe, gibt es den angegebenen Pfad zurück, aber mein Arbeitsverzeichnis im Terminal ändert sich nicht. Wie ändere ich das Arbeitsverzeichnis in meinem Terminal über ein Skript?
Antwort1
Das ist normal. Das "aktuelle" oder "Arbeitsverzeichnis" ist ein Parameter pro Prozess, und ein Prozess kann nurseine eigeneArbeitsverzeichnis. Standalone-Skripte werden als separater Shell-Prozess ausgeführt und können die übergeordnete Shell nicht beeinflussen (tatsächlich ist die übergeordnete Shell möglicherweise nicht immerSeihöllisch).
Sie müssen interne Funktionen Ihrer Shell verwenden, beispielsweise:
Shell-Funktionen:
mycd() { cd /media/hard/drive/partitionX/; pwd; }
Shell-Aliase:
alias mycd='cd /media/hard/drive/partitionX; pwd'
Ein Skript als „Quelle“ verwenden, anstatt es auszuführen:
. mycd.sh
Wenn Ihr Hauptziel darin besteht, Verknüpfungen zu bestimmten Verzeichnissen zu erstellen, können Sie auch Folgendes verwenden:
Symlinks an einem praktischeren Ort:
ln -s /media/hard/drive/partitionX ~/partX cd ~/partX
Variablen ($mydir):
mydir=/media/hard/drive cd $mydir
die $CDPATH-Funktion:
CDPATH=".:/media/hard/drive" cd partitionX
Antwort2
Tatsächlich habe ich nach langem Suchen gerade herausgefunden, dass Sie Folgendes verwenden können, wenn Sie das Verzeichnis ändern und trotzdem dieselbe Shell behalten möchten, damit Sie alle Antworten in Ihrem aktuellen Skript erhalten:
(cd your_dir; do_some_command_there)
Ich musste beispielsweise Folgendes verwenden:
((cd your_dir; git remote -v | wc -l)
Klappt wunderbar!