Warum ist sort -o nützlich?

Warum ist sort -o nützlich?

Die UNIX-Philosophie besagt: Mach eine Sache und mach sie gut. Erstelle Programme, die Text verarbeiten, denn das ist eine universelle Schnittstelle.

Der sortBefehl, zumindest GNU sort, hat eine -oOption zur Ausgabe in eine Datei statt in stdout. Warum ist beispielsweise sort foobar -o whatevernützlich, wenn ich einfach könnte sort foobar > whatever?

Antwort1

Nicht nur GNU hat es, sondern auch BSD. Und warum?
(Ich fand das auch eine gute Frage...)

Aus der Manpage: „Das angegebene Argument ist der Name einer Ausgabedatei, die anstelle der Standardausgabe verwendet werden soll. Diese Datei kann mit einer der Eingabedateien identisch sein.“

Sie können mit der Umleitung nicht zur gleichen Datei gehen, die Ausgabeumleitung löscht die Datei.

Um das noch deutlicher zu machen: Wenn ich eine Datei sortieren und die Sortierergebnisse an derselben Stelle ablegen wollte, würde ich vielleicht versuchen sort < foo > foo, . Außer dass die Ausgabeumleitung die Datei abschneidet foo, um die Ausgabe zu empfangen. Und dann gibt es nichts zu sortieren. Ohne „-o“ wäre die Vorgehensweise sort < foo > bar ; mv bar foo. Ich gehe davon aus, dass die -oOption etwas Ähnliches bewirkt, ohne dass Sie sich darum kümmern müssen.

Antwort2

Die Option '-o' war bereits im the sortdesSechste Ausgabe von Unix

Ich stimme jedoch mit Ihnen überein, dass dies nicht der Unix-Philosophie entspricht. uniqDiese Option gab es nicht (und damals sortauch nicht -u).

Auf meinem PDP-11 habe ich ein kleines Programm verwendet, das einen Parameter annimmt:

renac whatever

Wenn whateveres bereits existiert, würde es alles von stdin in eine temporäre Datei schreiben, die erst umbenannt wird, whatevernachdem der stdin-Eingang versiegt ist. Auf diese Weise können Sie die Ausgabe jedes Befehls in die Datei umleiten, renacanstatt sie auf den Dateinamen umzuleiten, ohne die Möglichkeit zu haben, den Eingang zu überschreiben. Das Überschreibproblem auf diese Weise zu lösen, entspricht meiner Meinung nach eher der Unix-Philosophie.

Einige spätere Ergänzungen zum Programm waren: Kein Überschreiben der Ausgabedatei, wenn nichts über stdin angekommen war (z. B. aufgrund eines Tippfehlers in der Befehlszeile) und Zulassen einer Option zum Anhängen von stdin an die benannte Datei.

Dies war eines der ersten (wenn nicht das erste) echten C-Programme, die ich erstellt habe (für meinen Job habe ich auf diesem System hauptsächlich in Pascal entwickelt).

verwandte Informationen