Non sarà possibile.
Il tuo script viene eseguito in una sub-shell generata dalla shell madre in cui è stato emesso il comando.
Qualsiasi cd
ing fatto nella sub-shell non ha effetto sulla shell madre.
Altri hanno sottolineato che non puoi cambiare la directory di lavoro di un genitore da un bambino.
Ma c'è un modo per raggiungere il tuo obiettivo -- se usi cd da una funzione di shell, può cambia la directory di lavoro Aggiungi questo al tuo ~/.bashrc:
go() {
cd "$(python /path/to/cd.py "$1")"
}
Il tuo script dovrebbe stampare il percorso della directory in cui vuoi passare. Ad esempio, questo potrebbe essere il tuo 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'))
Allora puoi fare:
[email protected]:/home/$> go tdi [email protected]:/home/tdi$> go tdi
cd
è implementato esclusivamente (?) come comando interno della shell, perché qualsiasi programma esterno non può modificare il CWD della shell madre.
Come scrive codaddict, ciò che accade nella tua sub-shell non influisce sulla shell genitore. Tuttavia, se il tuo obiettivo è presentare all'utente una shell in una directory diversa, puoi sempre fare in modo che Python usi os.chdir
per cambiare la directory di lavoro della sub-shell e quindi lanciare un nuovo shell da Python. Questo non cambierà la directory di lavoro della shell originale, ma lascerà all'utente una directory diversa.