GNU/Linux >> Znalost Linux >  >> Linux

Změňte pracovní adresář v shellu pomocí python skriptu

To nebude možné.

Váš skript běží v dílčím shellu vytvořeném nadřazeným shellem, kde byl příkaz vydán.

Jakékoli cd ing provedený v sub-shell nemá vliv na nadřazený shell.


Jiní poukázali na to, že nemůžete změnit pracovní adresář rodiče z potomka.

Existuje však způsob, jak dosáhnout svého cíle – pokud cd z funkce shellu, může změnit pracovní dir. Přidejte toto do svého ~/.bashrc:

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

Váš skript by měl vytisknout cestu k adresáři, který chcete změnit. Může to být například vaše cd.py:

#!/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'))

Pak můžete udělat:

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

cd je výhradně(?) implementován jako interní příkaz shellu, protože žádný externí program nemůže změnit CWD nadřazeného shellu.


Jak píše codaddict, to, co se děje ve vašem sub-shellu, nemá vliv na nadřazený shell. Pokud je však vaším cílem poskytnout uživateli shell v jiném adresáři, můžete vždy nechat Python použít os.chdir změnit pracovní adresář sub-shell a poté spustit nový shell z Pythonu. Toto nezmění pracovní adresář původního shellu, ale ponechá uživateli jeden v jiném adresáři.


Linux
  1. Předávání názvu souboru s mezerami do skriptu Shell?

  2. Odkud se spouští skript Shell?

  3. Jak spouštět skripty Pythonu ze shellu

  1. Jak změnit slovo v souboru pomocí skriptu linux shell

  2. Je možný smíšený skript Shell a python?

  3. Ubuntu Python shebang line nefunguje

  1. Vektorová algebra na Scientific Linux 7.1 s Python Script:Část 1

  2. Který Shell Interpreter spouští skript s No Shebang?

  3. Jak zabít python skript pomocí bash skriptu