Warum hat cp keinen Fortschrittsbalken wie wget?

55

Bitte beachte, dass ich nicht frage wie . Ich kenne schon Optionen wie pvund rsync -P.

Ich möchte fragen, warum keine cpFortschrittsanzeige implementiert wird, zumindest nicht als Flagge.

Lamnk
quelle
7
Wie wäre es mit "Der Autor hat kein Bedürfnis danach"?
Phunehehe
7
Für die Leser, die nicht wissen pvund rsync -Pfinden Sie unter Verschieben von Dateien mit Fortschrittsbalken ( eine der Antworten zitiert einen Patch, cpum cp -geinen Fortschrittsindikator zu geben).
Gilles 'SO - hör auf böse zu sein'
2
Ein besserer Ort für Fragen wäre die neue (seit 2010) Benutzer-Mailingliste coreutils.
Faheem Mitha

Antworten:

57

Die Tradition in Unix-Tools besteht darin, Meldungen nur dann anzuzeigen, wenn etwas schief geht. Ich denke, dies ist sowohl aus gestalterischen als auch aus praktischen Gründen. Das Design soll deutlich machen, wenn etwas schief geht: Sie erhalten eine Fehlermeldung, und es ist nicht in nicht wirklich informativen Nachrichten ertrunken. Der praktische Grund ist, dass es in den Anfängen von Unix noch Ferndrucker gab . Das heißt, die Ausgabe von Programmen wird auf Papier gedruckt, und Sie möchten keine Fortschrittsbalken drucken.

Was auch immer der Grund sein mag, die Tradition, nur nützliche Nachrichten anzuzeigen, hat in der Unix-Welt Bestand. Moderne Tools haben manchmal Fortschrittsbalken eingeführt. Im Fall von rsync liegt die Hauptmotivation darin, dass rsync häufig über das Netzwerk ausgeführt wird und Netzwerke viel flockiger sind als lokale Datenträger. Daher ist der Fortschrittsbalken nützlicher. Gleiches gilt für wget.

Gilles 'SO - hör auf böse zu sein'
quelle
6
Diese. Und cpgeht bis in die frühen 1970er Jahre zurück: Es ist so traditionell wie es nur geht.
dmckee
3
@dmckee Warum kann ddman dann Fortschrittserklärungen abgeben ? ddgeht zurück auf das Jahr 1966 (OS / 360). Unix-Tools können ausführlich sein, wenn der Benutzer möchte, dass sie ausführlich sind, aber Sie können leider nicht sagen, wie ausführlich cp sein soll (es gibt nur eine zusätzliche Ausführlichkeitsstufe:) -v.
Taffer
7
@taffer ddist in vielerlei Hinsicht eigenartig (am offensichtlichsten seine Optionssyntax), da es nicht von Unix stammt, sondern ein Klon eines IBM-Tools ist. Außerdem wurde es meistens für lange Aufgaben auf Bändern verwendet, sodass Sie in den Nachrichten aufgefordert wurden, aus Ihrer Pause zurückzukehren, anders cpals in den meisten Fällen, in denen Sie nur blinzeln und Ihre Aufforderung zurückerhalten würden.
Gilles 'SO- hör auf böse zu sein'
16

In der Unix-Welt ist jedes Tool darauf ausgelegt, einen Job zu erledigen und ihn gut auszuführen. Warum sollte man sich cpGedanken über die Ausgabe von Fortschritten machen, wenn ein anderes Tool pvdies bereits tut? Warum werden so viele Programme ohne Paginierung auf dem Bildschirm angezeigt? Weil es für diesen Job bereits Tools wie more(oder less) gibt. Warum stellen Ihnen die meisten Programme, die das Bearbeiten von Dateien erfordern, KEINEN Editor zur Verfügung und lagern diesen $EDITORstattdessen aus? Denn so bleibt jedem die Aufgabe, für die er konzipiert wurde, und dem Benutzer, der für alle Aufgaben seinen bevorzugten Editor verwendet.

Tangential sind die meisten Shell-Programme so konzipiert, dass ihre Ausgabe in andere Shell-Programme geleitet wird. Die einzige Ausgabe, die sie wahrscheinlich geben, sind Dinge, die nützlich wären, um sie im nächsten Befehl in der Kette zu analysieren. Programme wie cpwerden sowohl in Skripten als auch manuell von einem Terminal aus verwendet, sodass sich die Ausgabe auf den Exit-Code und die Liste der fehlgeschlagenen oder erfolgreichen Dateien konzentriert.

Erwarten Sie immer, Werkzeuge zu kombinieren, um den gewünschten Effekt zu erzielen.

Caleb
quelle
3
Gab pves wann cpwurde geschrieben? Es ist ein guter Punkt, aber ich habe das Gefühl, dass in diesem Fall cpursprünglich absichtlich ohne Fortschrittsausgabe geschrieben wurde, nichts, was mit anderen Werkzeugen zu tun hat, nur die anderen Gründe, die Sie und Gilles anführen.
Cascabel
1
@ Jefromi: Ich bin nicht sicher, ob es wichtig ist. Dies ist keine historische Frage, warum cpes eine Möglichkeit gab, als es zum ersten Mal codiert wurde. Die Frage ist, warum es jetzt so ist . Es ist schon viele Jahre her und jemand hätte die Funktionalität hinzufügen können, hat sich aber eindeutig dagegen entschieden. Ich bin sicher, dass die Verfügbarkeit anderer Tools diese Entscheidung beeinflusst.
Caleb
3

Dies ist einer der Randbereiche, in denen es Argumente für und gegen das Hinzufügen einer Fortschrittsbalkenoption zu cp gibt. Das Hauptargument dagegen ist, dass Sie möglicherweise nicht im Voraus wissen, dass Sie den Fortschritt wissen möchten. Ctrl-T / SIGINFO ist für diesen Zweck auf BSD verfügbar, und wenn dies auf GNU / Linux-Plattformen verfügbar wird, gibt es möglicherweise mehr Gründe dafür, die Fortschrittsbalkenlogik in cp auszulösen. In der Zwischenzeit besteht eine allgemeinere Lösung darin, ein separates Tool wie den Coreutils Progress Viewer ( progressfrüher bekannt als cv) zu verwenden, um den Status aller Prozesse auf dem System anzuzeigen.

Pádraig Brady
quelle