Wie kann ich bash durch Python ersetzen?

13

Laut der akzeptierten Antwort auf diese SO-Frage: kann Python einen großartigen Bash-Ersatz darstellen .

Meine Frage lautet dann: Wie mache ich einen nahtlosen Wechsel? Ich denke, die Hauptsache, die zu klären ist, um einen solchen Wechsel durchzuführen, ist: Wenn Sie ein virtuelles Terminal starten, rufen Sie eine Python-Shell auf (was aber?), Anstatt so etwas wie eine Bourne-Shell.

Ist das sinnvoll? Wenn ja, wie könnte ich das tun? Dieser Wikipedia-Vergleich gängiger Shells listet keine einzige Python-Shell auf: Vergleich von Befehls-Shells

user89
quelle

Antworten:

15

In diesem Thread und seiner akzeptierten Antwort geht es insbesondere darum, Python für Shell- Skripte zu verwenden , nicht als interaktive Shell.

Um Skripte in einer anderen Sprache zu schreiben, setzen Sie sie zB #!/usr/bin/env pythonanstelle von #!/bin/bashoben in Ihr Skript.

Wenn Sie eine andere interaktive Shell ausprobieren möchten, führen Sie sie einfach aus, z. B. geben Sie sie ipythonan Ihrer vorhandenen Shell-Eingabeaufforderung ein. Wenn Sie sich für diese Shell entschieden haben, legen Sie die SHELLUmgebungsvariable zu Beginn Ihrer Sitzung fest ( ~/.profilein den meisten Umgebungen oder in ~/.pam_environment), z. B. export SHELL=/usr/bin/ipython( .profileSyntax) oder SHELL="/usr/bin/ipython"( .pam_environmentSyntax).

Keine der auf fortgeschrittenen Sprachen wie Perl oder Python basierenden Shells ist meiner Meinung nach gut genug für die interaktive Verwendung. Sie sind zu ausführlich für allgemeine Aufgaben, insbesondere für die allgemeine Aufgabe einer Shell, eine Anwendung zu starten. Ich habe vor 4 Jahren über ein ähnliches Thema geschrieben . Ich denke nicht, dass sich die Situation seitdem grundlegend verbessert hat.

Gilles 'SO - hör auf böse zu sein'
quelle
14

Ich weiß, dass diese Frage jetzt ziemlich alt ist, aber es gibt eine neue Shell, die auf einer Obermenge von Python 3 namens xonsh basiert, die genau das ist, wonach Sie suchen.

von der Website:

Xonsh ist eine Python-artige, BASH-orientierte Shell-Sprache und Eingabeaufforderung. Die Sprache ist eine Obermenge von Python 3.4+ mit zusätzlichen Shell-Primitiven, die Sie von Bash und IPython gewohnt sind. Es funktioniert auf allen wichtigen Systemen, einschließlich Linux, Mac OSX und Windows. Xonsh ist für den täglichen Gebrauch von Experten und Anfängern gleichermaßen gedacht.

Sieh es dir auf xon.sh an

Ian Sudbery
quelle
2

Lieber nicht

Der Grund dafür ist, dass Python keine Unterstützung für den Umgang mit erhöhten Rechten bietet. Der schlimmste Fall ist das Bearbeiten von Systemdateien.

Vergleichen Sie

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

mit:

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

Sie können die native Dateibehandlung von Python nicht für Systemdateien verwenden, da Python von Natur aus keine Unterbefehle mit erhöhten Rechten ausführen kann.

Adam Ryczkowski
quelle
1
Ich bin mir nicht sicher, warum sudo schlimmer ist als alles andere. Wenn Sie sudo benötigen, müssen Sie / usr / bin / sudo ausführen, ein Programm wie jedes andere. Ihr spezielles Beispiel zeigt, wie schwierig es ist, die Shell-Mentalität von Python zu übernehmen und zu verwenden. Ein besserer Weg wäre möglich, aber es wäre eine weniger direkte Übersetzung.
Rosuav
1

Ipython ist in Ordnung . Schauen Sie sich auch die 'os'-Bibliothek an.

user400344
quelle
Sie haben Recht, IPython hätte eine naheliegende Wahl sein müssen ... aber wie starte ich IPython automatisch in einem Terminal-Emulator oder in einem tatsächlichen Terminal?
User89
Der Befehl: chfn -s $ (welches ipython)
user400344
Das kam verstümmelt heraus ... Nur: chfn -s $ (welches ipython) ... Stellen Sie sicher, dass sich der vollständige Pfad zu ipython in / etc / shells befindet.
User400344
Eine andere Möglichkeit ist, exec ipythonaus der aktuellen Shell-Startdatei wie.bashrc
ptman