Bagaimana saya bisa mengganti bash dengan Python?

13

Menurut jawaban yang diterima untuk pertanyaan SO ini:, Python dapat membuat pengganti bash yang hebat .

Pertanyaan saya kemudian, apakah ini: bagaimana cara saya beralih tanpa cacat? Saya pikir hal utama untuk memilah-milah membuat switch seperti itu adalah: ketika memulai terminal virtual, panggil beberapa shell Python (bagaimana?), Daripada sesuatu seperti shell Bourne.

Apakah itu masuk akal? Jika ya, bagaimana saya bisa melakukan itu? Perbandingan umum shell dari Wikipedia ini tidak mencantumkan shell Python tunggal: Perbandingan shell perintah

pengguna89
sumber

Jawaban:

15

Utas itu dan jawaban yang diterima khususnya adalah tentang menggunakan Python untuk skrip shell , bukan sebagai shell interaktif .

Untuk menulis skrip dalam bahasa yang berbeda, tuliskan misal #!/usr/bin/env pythonalih-alih #!/bin/bashdi bagian atas skrip Anda.

Jika Anda ingin mencoba shell interaktif yang berbeda, jalankan saja, misalnya ketik ipythonprompt shell yang ada. Jika Anda memutuskan untuk mengadopsi shell itu, setel SHELLvariabel lingkungan di awal sesi Anda (di ~/.profiledalam sebagian besar lingkungan, atau di ~/.pam_environment), mis. export SHELL=/usr/bin/ipython( .profileSintaks) atau SHELL="/usr/bin/ipython"( .pam_environmentsintaks).

Tak satu pun dari kerang yang saya lihat berdasarkan bahasa maju seperti Perl atau Python cukup baik untuk penggunaan interaktif menurut saya. Mereka terlalu bertele-tele untuk tugas-tugas umum, terutama pekerjaan umum shell yaitu meluncurkan aplikasi. Saya menulis tentang topik serupa 4 tahun yang lalu ; Saya tidak berpikir situasinya membaik secara fundamental sejak saat itu.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
14

Saya tahu pertanyaan ini sudah cukup lama sekarang, tetapi ada shell baru berdasarkan superset dari Python 3 yang disebut xonsh yang mungkin apa yang Anda cari.

dari situs web:

Xonsh adalah bahasa shell Python-ish, BASHwards-tampak dan command prompt. Bahasa ini adalah superset dari Python 3.4+ dengan shell primitif tambahan yang biasa Anda gunakan dari Bash dan IPython. Ini bekerja pada semua sistem utama termasuk Linux, Mac OSX, dan Windows. Xonsh dimaksudkan untuk penggunaan sehari-hari para ahli dan pemula.

Lihat di xon.sh

Ian Sudbery
sumber
2

Lebih baik tidak

Alasannya adalah bahwa Python tidak memiliki dukungan untuk berurusan dengan hak istimewa yang ditinggikan. Kasus terburuk adalah dengan mengedit file sistem.

Membandingkan

sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net

dengan:

out = subprocess.run('''sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net''', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env={"PATH": "/usr/bin"})

Anda tidak dapat menggunakan penanganan file asli Python untuk file sistem, karena Python secara inheren tidak dapat mengeksekusi sub-perintah dengan privilege yang ditingkatkan.

Adam Ryczkowski
sumber
1
Saya tidak yakin mengapa sudo lebih buruk dari yang lainnya. Jika Anda memerlukan sudo, Anda harus menjalankan / usr / bin / sudo, yang merupakan program seperti yang lainnya. Contoh khusus Anda di sini menunjukkan kesulitan dalam mengambil mentalitas shell dan menggunakannya dari Python; mungkin cara yang lebih baik, tetapi terjemahannya tidak langsung.
rosuav
1

Ipython tidak apa-apa. Juga, lihat perpustakaan 'os'.

pengguna400344
sumber
Anda benar, IPython seharusnya menjadi pilihan yang jelas ... tetapi bagaimana saya membuat IPython untuk memulai di dalam terminal emulator, atau di dalam terminal yang sebenarnya, secara otomatis?
pengguna89
Perintah: chfn -s $ (yang ipython)
user400344
Itu keluar kacau ... Hanya: chfn -s $ (yang ipython) ... Pastikan path lengkap ke ipython ada di / etc / shells.
user400344
Pilihan lain adalah exec ipythondari file startup shell saat ini, seperti.bashrc
ptman