Itu tidak mungkin.
Skrip Anda berjalan di sub-kulit yang dibuat oleh shell induk tempat perintah dikeluarkan.
cd
apa saja yang dilakukan di sub-kulit tidak memengaruhi shell induk.
Orang lain telah menunjukkan bahwa Anda tidak dapat mengubah direktori kerja orang tua dari anak.
Namun ada cara untuk mencapai tujuan Anda -- jika Anda melakukan cd dari fungsi shell, itu bisa mengubah direktori kerja. Tambahkan ini ke ~/.bashrc:
Andago() {
cd "$(python /path/to/cd.py "$1")"
}
Skrip Anda harus mencetak jalur ke direktori yang ingin Anda ubah. Misalnya, ini bisa menjadi cd.py:
Anda#!/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'))
Maka Anda dapat melakukan:
[email protected]:/home/$> go tdi [email protected]:/home/tdi$> go tdi
cd
secara eksklusif(?) diimplementasikan sebagai perintah internal shell, karena program eksternal apa pun tidak dapat mengubah CWD shell induk.
Seperti yang ditulis oleh codaddict, apa yang terjadi di sub-shell Anda tidak memengaruhi shell induk. Namun, jika tujuan Anda adalah untuk menyajikan pengguna dengan shell di direktori yang berbeda, Anda selalu dapat menggunakan Python os.chdir
untuk mengubah direktori kerja sub-shell dan meluncurkan baru cangkang dari Python. Ini tidak akan mengubah direktori kerja dari shell asli, tetapi akan meninggalkan pengguna dengan direktori yang berbeda.