
Ich habe festgestellt, dass es mir immer schwerfällt, mir die Namen der Befehle und deren Schalter zu merken, wenn ich ein Shell-Skript oder einen erweiterten Befehl erstellen möchte.
z.B
tr -d '\n' < file | wc -c
Obwohl ich in Programmiersprachen so etwas schreiben könnte wie
Länge(ersetzen(str(Datei), "\n", ""))
Das lässt sich leichter einprägen, die Wahrscheinlichkeit einer Suche in Manpages ist geringer und es ist für andere verständlicher.
Warum also gibt es Shell-Scripting seit so vielen Jahren in dieser kryptischen Form? Ist es ein Versuch, die Syntax so zu ändern, dass klar ist, was der Code tut, ohne dass man viele Manpages studieren muss? Gibt es Vorteile dieser Form? Wie können wir mit den Nachteilen umgehen, um das Beste aus Shell-Scripting herauszuholen?
Antwort1
Wie viele Programmiersprachen kennen Sie, mit denen Sie in einer einzigen, sehr kurzen Zeile eine Datei zum Lesen öffnen, eine Bibliotheksfunktion aufrufen können, die den Inhalt dieser Datei verwendet, die Ausgabe dieser Funktion in eine andere streamen, die Ausgabe der zweiten Funktion an den Benutzer zurückgeben, einen Beendigungsstatus zurückgeben und anschließend alles bereinigen können?
Das von Ihnen angeführte Beispiel lässt viele der Support-Details aus, die die meisten Sprachen benötigen.
Wie viele Programmiersprachen verfügen über Bibliotheksfunktionen, die eine beliebige Anzahl von Eingaben akzeptieren, in verschiedenen Modi funktionieren und über eine einfache Schnittstelle verfügen?
printf
, vielleicht, aber die meisten Bibliotheken haben am Ende eine ganze Reihe von Funktionen mit unterschiedlichen Namen und unterschiedlichen Parametern, die Sie lernen müssen. Ich sehe da keinen Unterschied.
Außerdem würden die meisten Sprachen die Funktionen nacheinander aufrufen. Shell-Skripte führen sie parallel aus und können beliebige Datenmengen durch die Pipeline streamen, ohne viel Speicher zu verbrauchen, und (wenn die Datenquelle die Tastatur, ein Netzwerk-Socket oder etwas anderes ist) wird alles mit verzögerter Auswertung erledigt, sobald die Daten eintreffen. Macht Ihre Lieblingssprache das?
Es gibt viele Sprachen, die die Aufgabe schneller oder effizienter erledigen oder Zahlen genauer verarbeiten können. Unterschätzen Sie jedoch nicht die Leistungsfähigkeit von Shell-Skripten!
Und was die Syntax betrifft? Nun, sie funktioniert. Sie müssten sie lernen, egal wie sie aussieht. Was wollen Sie mehr?
Antwort2
Versuchenpbs
-- Kombinieren von Kommandozeilen-Tools mit Python – zum Beispiel so:
# sort this directory by biggest file
print sort(du(glob("*"), "-sb"), "-rn")
# print the number of folders and files in /etc
print wc(ls("/etc", "-1"), "-l")