Eso no va a ser posible.
Su secuencia de comandos se ejecuta en un subshell generado por el shell principal donde se emitió el comando.
Cualquier cd
lo que se hace en el sub-shell no afecta al shell padre.
Otros han señalado que no se puede cambiar el directorio de trabajo de un padre a un hijo.
Pero hay una forma en que puede lograr su objetivo:si hace un cd desde una función de shell, puede cambiar el directorio de trabajo. Agregue esto a su ~/.bashrc:
go() {
cd "$(python /path/to/cd.py "$1")"
}
Su secuencia de comandos debe imprimir la ruta al directorio al que desea cambiar. Por ejemplo, este podría ser su 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'))
Entonces puedes hacer:
[email protected]:/home/$> go tdi [email protected]:/home/tdi$> go tdi
cd
se implementa exclusivamente (?) como un comando interno del shell, porque ningún programa externo puede cambiar el CWD del shell principal.
Como escribe codaddict, lo que sucede en su subcapa no afecta a la capa principal. Sin embargo, si su objetivo es presentarle al usuario un shell en un directorio diferente, siempre puede hacer que Python use os.chdir
para cambiar el directorio de trabajo del sub-shell y luego lanzar un nuevo caparazón de Python. Esto no cambiará el directorio de trabajo del shell original, pero dejará al usuario con uno en un directorio diferente.