Ändern Sie das Verzeichnis eines übergeordneten Prozesses aus einem untergeordneten Prozess

Ich habe ein cooles Python-Programm erstellt, das Menschen hilft, zu anderen Verzeichnissen in einer interaktiven Weise zu navigieren. Wenn sie dort ankommen, würde ich sie gerne mit Enter betreten und das Programm verlassen, das sie im ausgewählten Verzeichnis verlässt. Allerdings sind Sie immer am Ende in der gleichen dir Sie in b / c nur die Kind-Prozess, dass python läuft in tatsächlich ändert Verzeichnisse und das übergeordnete Prozess 'Verzeichnis bleibt unverändert.

  • Warum fehlen Daten, wenn ich an einen Python-Unterprozess stdin Pipe schreibe?
  • Bash: mkvirtualenv: Befehl nicht gefunden
  • "Escaping" $ bei der Ausführung eines Remote-bash-Befehls aus python-Stoff
  • Standardcodierung für python für stderr?
  • Python - wie kann ich Stdin aus der Shell lesen und Stdout zu Shell und Datei senden
  • Wenn Anweisungen und eine Zeile python Skripte von der Befehlszeile
  • Wie finde ich alle unbenutzten und ersten fehlenden Nummer in einem Array (in Python)?
  • Bevorzugte Möglichkeit, die Methode eines Objekts dynamisch aufzurufen
  • Dynamische Mehrfachvererbung in Python
  • Wie kann man den Argumenttyp in einer dynamisch typisierten Sprache angeben, dh Python?
  • Dynamisch erstellende Klassen - Python
  • Wie kann man die Basisklasse der Instanzen zur Laufzeit dynamisch verändern?
  • One Solution collect form web for “Ändern Sie das Verzeichnis eines übergeordneten Prozesses aus einem untergeordneten Prozess”

    Anstatt das Programm direkt auszuführen , gib ein Wrapper-Skript ein . Ihr Programm, wenn es abschließt, signalisiert dem Wrapper-Skript, welches Verzeichnis zu cd zu. Das Sourced Wrapper Skript macht die cd .

    Ein anderes Datei-Browsing-Dienstprogramm, Midnight Commander ( mc ), hat das gleiche Problem angesprochen. Hier ist sein Wrapper-Skript:

     MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE 

    Wie Sie sehen können, definiert dies eine temporäre Datei und übergibt diesen Dateinamen an mc mit der Option -P . Bevor mc wird, schreibt er das ausgewählte Verzeichnis in diese temporäre Datei. Diese Skripts liest diese temporäre Datei und CDs zum gewählten Verzeichnis.

    Um es bequem zu machen, dieses Wrapper-Skript auszuführen, erstellt man einen Shell-Alias:

     alias mc=". /usr/lib/mc/bin/mc-wrapper.sh"' 

    Mit leichten Änderungen erwarte ich, dass du diese Arbeit mit deinem Programm machen kannst.

    Python ist die beste Programmiersprache der Welt.