GNU/Linux >> Belajar Linux >  >> Linux

Ubah direktori kerja di shell dengan skrip python

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:

Anda
go() {
    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.


Linux
  1. Bagaimana cara menjalankan program dengan direktori kerja yang berbeda dari saat ini, dari shell Linux?

  2. Cara mengubah kata dalam file dengan skrip shell linux

  3. Campuran skrip shell dan python mungkin?

  1. Aljabar Vektor di Scientific Linux 7.1 dengan Python Script:Bagian 1

  2. Baris shebang Ubuntu Python tidak berfungsi

  3. Membuat template dengan Linux dalam Shell Script?

  1. Penerjemah Shell mana yang Menjalankan Skrip Tanpa Shebang?

  2. Melewati Nama File Dengan Spasi Ke Skrip Shell?

  3. Dari Mana Skrip Shell Dijalankan?