Cela ne sera pas possible.
Votre script s'exécute dans un sous-shell généré par le shell parent où la commande a été émise.
Tout cd
les modifications effectuées dans le sous-shell n'affectent pas le shell parent.
D'autres ont souligné que vous ne pouvez pas changer le répertoire de travail d'un parent à partir d'un enfant.
Mais il existe un moyen d'atteindre votre objectif - si vous utilisez un cd à partir d'une fonction shell, il peut changer le répertoire de travail. Ajoutez ceci à votre ~/.bashrc :
go() {
cd "$(python /path/to/cd.py "$1")"
}
Votre script doit imprimer le chemin d'accès au répertoire vers lequel vous souhaitez passer. Par exemple, cela pourrait être votre 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'))
Ensuite, vous pouvez faire :
[email protected]:/home/$> go tdi [email protected]:/home/tdi$> go tdi
cd
est exclusivement (?) implémenté en tant que commande interne du shell, car aucun programme externe ne peut modifier le CWD du shell parent.
Comme l'écrit codaddict, ce qui se passe dans votre sous-shell n'affecte pas le shell parent. Cependant, si votre objectif est de présenter à l'utilisateur un shell dans un répertoire différent, vous pouvez toujours demander à Python d'utiliser os.chdir
pour changer le répertoire de travail du sous-shell puis lancer un nouveau shell de Python. Cela ne changera pas le répertoire de travail du shell d'origine, mais en laissera un à l'utilisateur dans un répertoire différent.