Bash'ı Python ile nasıl değiştirebilirim?


13

Bu SO sorusunun kabul edilen cevabına göre: Python büyük bir bash değiştirme yapabilir .

O zaman sorum şu: bu sorunsuz bir geçiş yapmaya nasıl devam edebilirim? Ben böyle bir anahtar yapmak için sıralamak için ana şey olurdu: sanal bir terminal başlarken, Bourne kabuğu gibi bir şey yerine, bazı Python kabuk (ne olsa?) Arayın.

bu mantıklı mı? Evetse, bunu nasıl yapabilirim? Ortak kabukların Wikipedia karşılaştırması tek bir Python kabuğu listelemez: Komut kabuklarının karşılaştırılması

Yanıtlar:


16

Yani iplik ve özellikle de kabul edilen cevap kabuk için Python kullanarak hakkındadır komut dosyası değil gibi interaktif kabuk.

Komut dosyalarını farklı bir dilde yazmak için, örneğin komut dosyanızın üstüne koymak #!/usr/bin/env pythonyerine #!/bin/bash.

Farklı bir etkileşimli kabuk denemek istiyorsanız, çalıştırın, örneğin ipythonmevcut kabuk isteminize yazın. Bu kabuğu benimsemeye karar verdiyseniz, SHELLortam değişkenini oturumunuzun başlangıcında ( ~/.profileçoğu ortamda veya içinde ~/.pam_environment), örneğin export SHELL=/usr/bin/ipython( .profilesözdizimi) veya SHELL="/usr/bin/ipython"( .pam_environmentsözdizimi) olarak ayarlayın.

Perl veya Python gibi gelişmiş dillere göre gördüğüm mermilerin hiçbiri bence interaktif kullanım için yeterince iyi değil. Ortak görevler için çok ayrıntılı, özellikle bir uygulamayı başlatmak için bir kabuğun ortak işi. Ben 4 yıl önce benzer bir konu hakkında yazmış ; O zamandan beri durumun temelde iyileştiğini düşünmüyorum.


14

Bu sorunun şu anda oldukça eski olduğunu biliyorum, ancak aradığınız şey olabilecek xonsh adında Python 3'ün bir üst kümesine dayanan yeni bir kabuk var.

web sitesinden:

Xonsh bir Python-ish, BASHwards görünümlü kabuk dili ve komut istemidir. Dil, Bash ve IPython'dan alışkın olduğunuz ek kabuk ilkelleriyle Python 3.4+ 'un bir üst kümesidir. Linux, Mac OSX ve Windows dahil tüm büyük sistemlerde çalışır. Xonsh, hem uzmanların hem de acemilerin günlük kullanımı içindir.

Xon.sh adresinde görün


2

Aksine değil

Bunun nedeni, Python'un yüksek ayrıcalıklarla uğraşmak için hiçbir desteğinin olmamasıdır. En kötü durum sistem dosyalarını düzenlemektir.

Karşılaştırmak

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

ile:

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"})

Python, yükseltilmiş ayrıcalıklara sahip alt komutları doğal olarak yürütemediğinden, sistem dosyaları için Python'un yerel dosya işlemesini kullanamazsınız.


1
Sudo'nun neden her şeyden daha kötü olduğundan emin değilim. Eğer sudo'ya ihtiyacınız varsa, başka bir program olan / usr / bin / sudo komutunu çalıştırmanız gerekir. Buradaki özel örneğiniz, kabuk zihniyetini alıp Python'dan kullanmanın zorluğunu gösteriyor; daha iyi bir yol mümkün olabilir, ancak daha az doğrudan çeviri olurdu.
rosuav

1

Ipython iyi. Ayrıca, 'os' kütüphanesine bakın.


Haklısın, IPython bariz bir seçim olmalıydı ... ama IPython'u otomatik olarak bir terminal öykünücüsünün içinde veya gerçek bir terminalin içinde başlatmayı nasıl sağlayabilirim?
user89

Komut: chfn -s $ (hangi ipython)
user400344

Bu bozuk çıktı ... Sadece: chfn -s $ (ki ipython) ... ipython'a giden tam yolun / etc / shells içinde olduğundan emin olun.
user400344

başka bir seçenek exec ipythongeçerli kabuk başlangıç ​​dosyasından, gibi.bashrc
ptman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.