GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ändern Sie das Arbeitsverzeichnis in der Shell mit einem Python-Skript

Das wird nicht möglich sein.

Ihr Skript wird in einer Sub-Shell ausgeführt, die von der übergeordneten Shell erzeugt wird, in der der Befehl ausgegeben wurde.

Jeder cd Änderungen in der Sub-Shell wirken sich nicht auf die Parent-Shell aus.


Andere haben darauf hingewiesen, dass Sie das Arbeitsverzeichnis eines Elternteils nicht von einem Kind ändern können.

Aber es gibt einen Weg, wie Sie Ihr Ziel erreichen können – wenn Sie von einer Shell-Funktion aus cd, kann Arbeitsverzeichnis ändern. Fügen Sie dies zu Ihrem ~/.bashrc hinzu:

go() {
    cd "$(python /path/to/cd.py "$1")"
}

Ihr Skript sollte den Pfad zu dem Verzeichnis ausgeben, in das Sie wechseln möchten. Dies könnte zum Beispiel Ihre cd.py sein:

#!/usr/bin/python
import sys, os.path
if sys.argv[1] == 'tdi': print(os.path.expanduser('~/long/tedious/path/to/tdi'))
elif sys.argv[1] == 'xyz':  print(os.path.expanduser('~/long/tedious/path/to/xyz'))

Dann können Sie Folgendes tun:

[email protected]:/home/$> go tdi
[email protected]:/home/tdi$> go tdi

cd ist ausschließlich(?) als Shell-interner Befehl implementiert, da kein externes Programm die CWD der übergeordneten Shell ändern kann.


Wie codaddict schreibt, wirkt sich das, was in Ihrer Sub-Shell passiert, nicht auf die übergeordnete Shell aus. Wenn Sie jedoch dem Benutzer eine Shell in einem anderen Verzeichnis präsentieren möchten, können Sie Python immer os.chdir verwenden lassen um das Arbeitsverzeichnis der Sub-Shell zu ändern und dann ein neues zu starten Shell von Python. Dies wird das Arbeitsverzeichnis der Original-Shell nicht ändern, aber dem Benutzer eines in einem anderen Verzeichnis hinterlassen.


Linux
  1. Vektoralgebra auf Scientific Linux 7.1 mit Python-Skript:Teil 1

  2. Dateinamen mit Leerzeichen an ein Shell-Skript übergeben?

  3. Gemischtes Shell- und Python-Skript möglich?

  4. Aktuelles Verzeichnis des Shell-Skripts?

  5. Python-Skript kann nicht mit Strg-C beendet werden

So führen Sie einen Shell-Befehl mit Python aus

Wie führe ich ein Programm mit einem anderen Arbeitsverzeichnis als dem aktuellen aus, von der Linux-Shell?

So ändern Sie ein Wort in einer Datei mit einem Linux-Shell-Skript

Debuggen in pyCharm mit sudo-Berechtigungen?

Ubuntu Python Shebang-Zeile funktioniert nicht

Wie man Python-Skript mit Bash-Skript beendet