Wenn ich das Arbeitsverzeichnis in einem Skript ändere und ausführen, ändert sich das Arbeitsverzeichnis nur in dem angegebenen Pfad, während es sich im Skript befindet

650
Dash Conroy

Wenn ich das Arbeitsverzeichnis in einem Skript ändere und ausführen, ändert sich das Arbeitsverzeichnis nur in dem angegebenen Pfad, während es sich im Skript befindet. Hier ist mein Skript: (um sicherzustellen, dass das Verzeichnis tatsächlich geändert wurde)
#!/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 durch ein Skript?

0
Sie müssen das Skript "quellen". Siehe [diese ähnliche Frage] (https://unix.stackexchange.com/q/27139). aguslr vor 5 Jahren 1

1 Antwort auf die Frage

4
grawity

Das ist normal. Das Verzeichnis "current" oder "working" ist ein pro-prozessorischer Parameter, und ein Prozess kann nur sein eigenes Arbeitsverzeichnis ändern . Standalone - Skripte werden als separate Shell - Prozess ausgeführt und kann nicht die übergeordnete Shell beeinflussen (in der Tat könnte die Eltern nicht immer sein ein Shell).

Sie müssen für Ihre Shell interne Funktionen verwenden, z.

  • Shell-Funktionen:

    mycd() { cd /media/hard/drive/partitionX/; pwd; } 
  • Shell-Aliase:

    alias mycd='cd /media/hard/drive/partitionX; pwd' 
  • "source" ein Skript, anstatt es auszuführen:

    . mycd.sh 

Wenn Sie hauptsächlich Verknüpfungen zu bestimmten Verzeichnissen erstellen möchten, können Sie auch Folgendes verwenden:

  • Symlinks an einem günstigeren 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 
Wow, vielen Dank! Das war sehr hilfreich! Danke für die ausführliche Antwort mit allen Möglichkeiten! Dash Conroy vor 5 Jahren 0