Ist es "eine Sache auf einmal tun"?
Dieser Kommentar klingt wie eine Frage nach einem allgemeinen Konstruktionsprinzip. Oft sind Fragen dazu sehr subjektiv, und wir können keine richtige Antwort schreiben. Seien Sie gewarnt, dass wir in diesem Fall Fragen schließen können.
Manchmal haben wir eine Erklärung für die ursprüngliche Designauswahl, weil die Entwickler darüber geschrieben haben. Aber ich habe keine so schöne Antwort auf diese Frage.
Warum cp
ist das so?
Das Problem ist, dass Unix über 40 Jahre alt ist.
Wenn Sie jetzt ein neues System erstellen, treffen Sie möglicherweise andere Entwurfsentscheidungen. Aber das Ändern von Unix würde bestehende Skripte beschädigen, wie in anderen Antworten erwähnt.
Warum wurde cp
entwickelt, um vorhandene Dateien stillschweigend zu überschreiben?
Die kurze Antwort lautet "Ich weiß nicht" :-).
Verstehe, dass dies cp
nur ein Problem ist. Ich denke, dass keines der ursprünglichen Befehlsprogramme gegen das Überschreiben oder Löschen von Dateien geschützt ist. Die Shell hat ein ähnliches Problem beim Umleiten der Ausgabe:
$ cat first.html > second.html
Dieser Befehl überschreibt auch unbemerkt second.html
.
Ich bin gespannt, wie all diese Programme umgestaltet werden könnten. Dies erfordert möglicherweise zusätzliche Komplexität.
Ich denke, das ist ein Teil der Erklärung: Frühes Unix betonte einfache Implementierungen . Eine ausführlichere Erklärung finden Sie unter "Schlechter ist besser" am Ende dieser Antwort.
Sie können es ändern, > second.html
sodass es mit einem Fehler beendet wird, falls es second.html
bereits vorhanden ist. Aber wie bereits erwähnt, manchmal der Benutzer nicht will , eine vorhandene Datei ersetzen. Zum Beispiel kann sie ein komplexes Kommando aufbauen und es mehrmals versuchen, bis es das tut, was sie will.
Der Benutzer kann rm second.html
zuerst ausgeführt werden, wenn dies erforderlich ist. Dies könnte ein guter Kompromiss sein! Es hat einige mögliche eigene Nachteile.
- Der Benutzer muss den Dateinamen zweimal eingeben.
- Die Leute bekommen auch viel Ärger mit
rm
. Deshalb möchte ich auch rm
sicherer machen . Aber wie? Wenn wir rm
jeden Dateinamen anzeigen lassen und den Benutzer zur Bestätigung auffordern, muss er nun drei Befehlszeilen anstatt einer schreiben . Wenn sie dies zu oft tun muss, wird sie es sich zur Gewohnheit machen und "y" eingeben, um es zu bestätigen, ohne nachzudenken. Es könnte also sehr nervig und trotzdem gefährlich sein.
Auf einem modernen System empfehle ich , den trash
Befehl zu installieren und stattdessen zu verwenden, rm
wo dies möglich ist. Die Einführung von Trash Storage war eine großartige Idee, z. B. für einen grafischen Einzelbenutzer-PC .
Ich denke, es ist auch wichtig, die Einschränkungen der ursprünglichen Unix-Hardware zu kennen - begrenzter RAM- und Festplattenspeicher, Ausgabe auf langsamen Druckern sowie System- und Entwicklungssoftware.
Beachten Sie, dass das ursprüngliche Unix keine Tab-Vervollständigung hatte , um schnell einen Dateinamen für einen rm
Befehl einzugeben . (Außerdem verfügt die ursprüngliche Bourne-Shell nicht über einen Befehlsverlauf, z. B. wenn Sie die Aufwärtspfeiltaste verwenden bash
).
Bei der Druckerausgabe würden Sie den zeilenbasierten Editor verwenden ed
. Dies ist schwerer zu lernen als ein visueller Texteditor. Sie müssen einige aktuelle Zeilen drucken, entscheiden, wie Sie sie ändern möchten, und einen Bearbeitungsbefehl eingeben.
Using > second.html
ähnelt der Verwendung eines Befehls in einem Zeileneditor. Die Auswirkung hängt vom aktuellen Status ab. (Wenn second.html
bereits vorhanden, wird der Inhalt verworfen.) Wenn der Benutzer sich über den aktuellen Status nicht sicher ist, wird erwartet, dass er ausgeführt wird ls
oder ls second.html
zuerst.
"Einfache Implementierung" als Gestaltungsprinzip
Es gibt eine populäre Interpretation von Unix-Design, die beginnt:
Das Design muss sowohl in der Implementierung als auch in der Benutzeroberfläche einfach sein. Es ist wichtiger, dass die Implementierung einfach ist als die Schnittstelle. Einfachheit ist die wichtigste Überlegung in einem Design.
...
Gabriel argumentierte, dass "Schlimmer ist besser" erfolgreichere Software hervorbringe als der MIT-Ansatz: Solange das anfängliche Programm im Grunde genommen gut ist, wird es viel weniger Zeit und Mühe kosten, es anfangs zu implementieren, und es wird einfacher sein, sich an neue Situationen anzupassen. So wird beispielsweise die Portierung von Software auf neue Maschinen wesentlich einfacher. Daher wird sich seine Verwendung schnell verbreiten, lange bevor ein [besseres] Programm entwickelt und bereitgestellt werden kann (First-Mover-Vorteil).
https://en.wikipedia.org/wiki/Worse_is_better