Wir machen alle unsere Skripte bisher mit Bash, aber ich fange an, mich ein bisschen albern darüber zu fühlen. Obwohl wir mit Bash natürlich alles machen können, was wir wollen (es ist ziemlich mächtig), frage ich mich, ob wir nicht stattdessen eine richtige Skriptsprache verwenden sollten (in unserem Fall höchstwahrscheinlich Ruby).
Wie entscheiden Sie, wann Sie Perl / Python / Ruby über Bash für ein Skript verwenden? Ich denke nicht, dass ein Init-Skript mit Ruby Sinn macht, aber wie wäre es mit einem etwas längeren Skript, das E-Mail-Konten hinzufügt?
Antworten:
Angesichts eines Problems, mit dem beide umgehen können, sollten Sie das verwenden, mit dem Sie sich am wohlsten fühlen. Letztendlich gibt es viele kleine Details, und nur Erfahrung kann Sie lehren, sie zu sehen.
Bash ist eine Allzweck-Skriptsprache wie Python, Ruby und Perl, aber jede hat andere Stärken als der Rest. Perl ist hervorragend in der Textanalyse, Python behauptet, das eleganteste der ganzen Reihe zu sein, Bash-Skripte eignen sich hervorragend zum "Umleiten", wenn Sie wissen, was ich meine, und Ruby ... nun, Ruby ist in vielen Dingen etwas Besonderes Von Wegen.
Die Unterschiede zwischen ihnen sind jedoch nur dann von Bedeutung, wenn Sie über ausreichend Erfahrung mit Skripten verfügen. Ich schlage vor, dass Sie eine Sprache auswählen und an ihre Grenzen gehen, bevor Sie zur nächsten wechseln. In einem Shell-Skript kann man viel machen, mehr als die meisten Leute zugeben würden. Jede Sprache ist so schwer, wie Sie es wollen. Nachdem Sie ein paar Dinge geschrieben haben, ist jede Sprache für Sie "einfach".
Mit der Shell vertraut zu sein, zahlt sich schnell aus, wenn Sie unter Linux leben. Vielleicht möchten Sie damit beginnen. Wenn Sie in einem Shell-Skript eine Aufgabe finden, die Sie unmöglich oder unpraktisch lösen können, verwenden Sie etwas anderes.
Denken Sie auch daran, dass das Erlernen von Shell-Skripten sehr einfach ist. Die eigentliche Stärke liegt in anderen Programmen wie awk, sed, tr, et al.
quelle
TL; DR - Verwenden Sie bash nur, um eine bessere Sprache zu installieren (sofern diese noch nicht verfügbar ist), andernfalls verschwenden Sie nicht behebbare, kostbare menschliche Zeit. Wenn Sie es nicht ohne Fehler von Hand auf der Kommandozeile machen können, schreiben Sie nicht mit bash / shell.
Es ist 2015, daher würde ich Folgendes in Betracht ziehen:
Speicheraufwand
Startzeit
Performance
Produktivität
Ich finde, es gibt keinen Grund, Bash / Shell zu verwenden, wenn Ruby / Python installiert ist.
Und wahrscheinlich wird für die Installation von Ruby / Python nicht einmal ein Bash-Skript benötigt (mit Ausnahme von busybox sind einige System-Tools ohnehin davon abhängig, dass Python / Perl vorhanden ist).
Und jedes Mal, wenn Sie ein Shell-Skript schreiben, "üben" Sie genau das - anstatt etwas Mächtigeres / Produktiveres zu lernen.
Warum benutzen die Leute heutzutage Bash? Weil es eine schreckliche Angewohnheit ist, die sich nur schwer auflösen lässt. Ein Drehbuch ist selten nach den ersten Minuten "für immer" fertig - egal wie stark die Leute dazu neigen, so zu denken. Zusammen mit dem Irrtum "Es ist der letzte Fehler in diesem Skript".
Fazit: Verwenden Sie bash / shell nur, wenn Sie absolut dazu gezwungen sind (z. B.
~/.bashrc
busybox), da es heutzutage fast nie mehr das "richtige Werkzeug für den Job" ist.quelle
Ich benutze bash, wenn mein Hauptaugenmerk auf der Dateiverwaltung liegt. Dies kann das Verschieben, Kopieren und Umbenennen von Dateien sowie das Verwenden von Dateien als Eingabe für andere Programme oder das Speichern der Ausgabe eines anderen Programms in Dateien umfassen. Ich schreibe selten Bash-Code, der den Inhalt einer Datei untersucht oder die Ausgabe zum Schreiben in eine Datei generiert. Das überlasse ich den anderen Programmen (die ich in Perl oder Python schreiben kann), die ich über bash starte.
Ich verwende Perl und Python, wenn mein Hauptaugenmerk auf dem Lesen von Daten aus Dateien, der Verarbeitung dieser Daten und dem Schreiben von Ausgaben in Dateien liegt. Wenn ich (in Perl) das
system
Kommando, Back Ticks oder (in Python) dassubprocess
Modul zu ausführlich benutze , denke ich darüber nach, das Skript in bash zu schreiben. Andererseits fange ich manchmal an, einem Bash-Skript so viel Funktionalität hinzuzufügen, dass es irgendwann sinnvoller ist, es in Perl / Python neu zu schreiben, als mich mit der (im Vergleich) eingeschränkten Unterstützung von Bash für Variablenbereiche, Funktionen, Datenstrukturen usw. Zu befassen .quelle
=~
von[[ ]]
mir unterstützten Operators habe ich mich für einIch mag die Kriterien in diesem Blog-Beitrag .
quelle
Ich fand diese Perl versus Bash Analyse nützlich ...
http://blogs.perl.org/users/buddy_burden/2012/04/perl-vs-shell-scripts.html
Der Einfachheit halber kopiere ich eine Zusammenfassung des Autors 1) wenn Bash bessere Ergebnisse liefert und 2) wenn Perl bessere Ergebnisse liefert ...
Wenn Bash besser ist ...
Wenn Perl besser ist ...
quelle
fail "error" unless system("foobar")
) verfügt.Nach meiner Erfahrung ist Bash versus Python ein Kompromiss zwischen Entwicklungszeit und Flexibilität. Eine rudimentäre Lösung für ein Problem kann in der Regel schneller in einem Bash-Skript erstellt werden als in einem Python-Skript.
In Python werden Sie in der Regel mehr über die Struktur Ihrer Lösung nachdenken als über das entsprechende Bash-Skript. Python ist aussagekräftiger als ein Bash-Skript und kann daher im Laufe der Zeit besser skaliert und geändert werden. Es bleibt auch im Allgemeinen besser lesbar.
Bash ist näher am Dateisystem und eignet sich hervorragend für erste Lösungsentwürfe für Probleme, die NICHT genau definiert sind. Aus diesem Grund kann ein Bash-Skript eine gute erste Wahl sein, um einen Prototyp zu erstellen, um ihn vollständig auf Python zu portieren, sobald das Problem besser verstanden wurde.
quelle
Bash ist eine Unix-Shell, die eine Skriptsprache enthält. Es ist eher ein Befehlsprozessor. Sie steuern die Art und Weise, wie Sie Befehle ausführen, Sie führen sie tatsächlich aus.
Perl / Ruby / Python sind Allzwecksprachen.
Wenn Sie ein Shell-Skript möchten, verwenden Sie Bash
Wenn Sie eine komplexere Aufgabe haben oder nicht mit der Shell in Verbindung stehen möchten. Verwenden Sie Python usw.
Ich würde diese Sprachen eigentlich nie vergleichen. Python etc. sind portabel. Sie können sie überall ausführen. Bash ist nur für Unix.
Python usw. hat Tonnen von wiederverwendbaren Bibliotheken, die Millionen von Aufgaben lösen.
Es ist fast das gleiche, wenn Sie fragen. "Wann Sie Paint und wann Photoshop verwenden sollten"
Zum Verarbeiten von E-Mails würde ich wieder Ruby verwenden, da es viele wiederverwendbare Bibliotheken gibt.
Aber der beste Weg wäre, Bash und Ruby zu kombinieren. Das wäre richtig. Wenn Sie ein E-Mail-Verarbeitungsskript in Ruby und Bash erstellen, wird dieses Ruby-Skript aufgerufen und andere Kommandos ausgeführt.
Wenn Sie also einen Befehlsprozessor benötigen, verwenden Sie bash. Sie führen Unix-Befehle aus und steuern sie.
UPDATE nach 7 Jahren (März 2019)
Obwohl sich der Hauptteil meiner Antwort nicht geändert hat, möchte ich darauf hinweisen.
Bash ist auch eine mächtige Skriptsprache. Für die Textverarbeitung könnte es eine absolut legitime Wahl sein.
Bitte lies die Kommentare von mkaito weiter unten. Sie sind alle völlig wahr.
quelle
Shell-Skripte wie bash, ksh, zsh, sh und fish sind im Vergleich zu allgemeinen Hochsprachen wie Ruby, Python oder Perl bekanntermaßen überraschend. Während ein Shell-Skript möglicherweise als eine kürzere Datei als das entsprechende Allzweck-Skript beginnt, führen die Überraschungen zu einer Menge defensivem Code,
set -euo pipefail
um beispielsweise strenge Modi zu aktivieren.Beispielsweise setzen die meisten Shell-Sprachen die Ausführung von Zeilen in einem Shell-Skript fort, selbst wenn einer der Befehle fehlschlägt. Im Gegensatz dazu versagt eine Allzwecksprache beim ersten Fehler sofort und häufig mit hoher Last, was zu einem sichereren und vorhersehbareren Verhalten in Skripten mit sogar geringer Komplexität führt.
quelle
Sehr voreingenommener Artikel.
Ich finde bash nicht so schwer zu debuggen. Python ist oft viel zu starr, wohingegen man mit bash sehr kreativ sein kann. Wenn Sie ein guter Querdenker sind, werden Sie bash mögen.
Ich führe Bash-Skripte mit Millionen von DNA-Sequenzierungslesevorgängen in Tausenden von Dateien aus. Und im Gegensatz zu dem, was alle sagen, werden dieselben Versionen der Skripte in C ++ nicht wirklich viel schneller ausgeführt (in wenigen Minuten werden sie voneinander getrennt).
Ich denke, dass Bash, wie Perl, nicht besonders benutzerfreundlich und einfach zu lesen ist. Das macht den Leuten Angst, weil die meisten Leute keine großen abstrakten Denker sind. Aber hellere, kreativere Programmierer lieben es und nutzen es häufig. Wenn Sie sich selbst kennen und wissen, dass Sie ein Gehirn haben, lassen Sie sich nicht abschrecken. Wenn Sie ein Grunddenker sind, halten Sie sich vielleicht an etwas wie Python. Jedem das Seine.
quelle
Aus dem "Lama-Buch"
quelle
Verwenden Sie als Faustregel die einfachste Sprache , die für Ihre jeweilige Aufgabe gut genug ist. Und seine Besonderheiten sind nur insoweit wirklich nützlich.
Und was die Lesbarkeit betrifft, ist Bash schrecklich, wenn Ihr Programmierstil schrecklich ist. Wenn Sie einfach den Code dort hineinwerfen, wird er dunkel.
Wenn Sie jedoch den Code in die kürzesten Funktionen aufteilen und die Dinge auf einfach verständliche Weise benennen, ist dies die klarste Sprache, die Sie finden können. Weil es sehr knapp ist.
Als Beispiel ist dies mein neuester Code in Bash. Beachten Sie, wie einfach es zu verstehen und zu tippen ist:
quelle