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

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.


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


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.


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'.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.