Avatar von szi
  • szi

685 Beiträge seit 02.08.2005

Eine uralte Krankheit von Unix

Ollfried schrieb am 12.10.2017 12:59:

Die Linux-Pipe kann keine Objekte übergeben.

Bis heute ist es im Unix-Bewusstsein nicht angekommen, dass Werkzeuge zwei Ausgaben benötigen: eine Maschinen-lesbare und eine Menschen-lesbare.

Die Liste der Antworten auf Stackexchange, dass man es tunlichst sein lassen sollte, die Ausgabe von ls zu parsen, ist gefühlt unendlich. Aber auch aktuelle Programme sind keinen Deut besser.

Ultimativ abschreckendes Negativ-Beispiel ist Ansible! Dort hat man es geschafft, eine weitestgehend Maschinen-lesbare Ausgabe (JSON), die im Falle von Fehlermeldungen durch gequotete Zeilenumbrüche völlig unleserlich ist, soweit zu verhunzen, dass man sie auch nicht mehr mit JQ auswerten kann. Folgender Quatsch ist nötig, um diesen Mist wieder zu korrigieren:

echo \[ sed 's/^\(.*\) | \(.*\) => {/{\n "hostname": "\1",\n "result": "\2",/' | sed '$ ! s/^}/},/' echo \]

Und auch das funktioniert nicht immer zuverlässig.

Dabei wäre es so einfach. Jedes Programm bräuchte nur zusätzlich zur normalen Ein- und Ausgabe eine JSON-Serialisierung von stdin und stdout vornehmen und alles wäre in Butter. Aber darauf ist leider noch keiner gekommen.

Ich halte grundsätzlich nicht viel von Windows und den Ansatz, alles in eine Shell zu packen, halte ich auch für wenig sinnvoll. Aber eine vergleichbare Funktionalität wie sie die Powershell unter Windows bietet, ist für Unix so was von überfällig. Das Konzept, dass das gleiche Programm sowohl für Skripte als auch für interaktive Eingaben verwendet wird, ist der skelettierte Unix-Gaul von dem partout keiner runter kommt.

Das Posting wurde vom Benutzer editiert (12.10.2017 17:54).

Bewerten
- +