Jak mogę zastąpić bash Pythonem?

13

Zgodnie z przyjętą odpowiedzią na to pytanie SO: Python może być świetnym zamiennikiem basha .

Moje pytanie brzmi zatem: w jaki sposób mogę dokonać płynnej zmiany? Myślę, że najważniejszą rzeczą do zrobienia, aby dokonać takiego przełączenia, byłoby: uruchamiając terminal wirtualny, wywołaj powłokę Pythona (a co?), A nie coś w rodzaju powłoki Bourne'a.

Czy to ma sens? Jeśli tak, jak mogę to zrobić? To porównanie popularnych powłok w Wikipedii nie zawiera pojedynczej powłoki Python: Porównanie powłok poleceń

użytkownik89
źródło

Odpowiedzi:

16

W szczególności ten wątek i jego zaakceptowana odpowiedź dotyczą używania Pythona do skryptowania powłoki , a nie interaktywnej powłoki.

Aby pisać skrypty w innym języku, umieść np. #!/usr/bin/env pythonZamiast #!/bin/bashna górze skryptu.

Jeśli chcesz wypróbować inną interaktywną powłokę, po prostu uruchom ją, np. Wpisz ipythonw istniejącym monitie powłoki. Jeśli zdecydowałeś się przyjąć tę powłokę, ustaw SHELLzmienną środowiskową na początku sesji ( ~/.profilew większości środowisk lub w ~/.pam_environment), np. export SHELL=/usr/bin/ipython( .profileSkładnia) lub SHELL="/usr/bin/ipython"( .pam_environmentskładnia).

Żadna z powłok, które widziałem w oparciu o zaawansowane języki, takie jak Perl lub Python, nie jest moim zdaniem wystarczająco dobra do interaktywnego użycia. Są zbyt gadatliwi w stosunku do typowych zadań, zwłaszcza wspólnego zadania powłoki, która polega na uruchamianiu aplikacji. I napisał o podobnym temacie 4 lata temu ; Nie sądzę, aby od tego czasu sytuacja uległa zasadniczej poprawie.

Gilles „SO- przestań być zły”
źródło
14

Wiem, że to pytanie jest już dość stare, ale istnieje nowa powłoka oparta na nadzbiorze Pythona 3 o nazwie xonsh, która może być tym, czego szukasz.

ze strony:

Xonsh jest językiem powłoki i wierszem poleceń wyglądającym na Pythona, BASHwards. Język jest nadzbiorem Pythona 3.4+ z dodatkowymi operacjami podstawowymi powłoki, do których jesteś przyzwyczajony z Bash i IPython. Działa na wszystkich głównych systemach, w tym Linux, Mac OSX i Windows. Xonsh jest przeznaczony do codziennego użytku zarówno ekspertów, jak i nowicjuszy.

Zobacz na xon.sh

Ian Sudbery
źródło
2

Raczej nie

Powodem jest to, że Python nie ma obsługi radzenia sobie z podwyższonymi uprawnieniami. Najgorszy przypadek dotyczy edycji plików systemowych.

Porównać

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

z:

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

Nie można używać rodzimej obsługi plików Pythona dla plików systemowych, ponieważ Python z natury nie jest w stanie wykonywać komend z podwyższonymi uprawnieniami.

Adam Ryczkowski
źródło
1
Nie jestem pewien, dlaczego sudo jest gorsze niż cokolwiek innego. Jeśli potrzebujesz sudo, musisz uruchomić / usr / bin / sudo, który jest programem jak każdy inny. Twój szczególny przykład pokazuje trudność w pobieraniu mentalności powłoki i używaniu jej z Python; może być lepszy sposób, ale byłoby to mniej bezpośrednie tłumaczenie.
rosuav
1

Ipython jest w porządku. Zobacz także bibliotekę „os”.

użytkownik400344
źródło
Masz rację, IPython powinien być oczywistym wyborem ... ale w jaki sposób zmusić IPython do automatycznego uruchamiania wewnątrz emulatora terminala lub w rzeczywistym terminalu?
user89
Polecenie: chfn -s $ (który ipython)
user400344
To wyszło zniekształcone ... Po prostu: chfn -s $ (który ipython) ... Upewnij się, że pełna ścieżka do ipython znajduje się w / etc / shells.
user400344,
inną opcją jest exec ipythonz bieżącego pliku startowego powłoki, na przykład.bashrc
ptman