Це "робити одну справу за один раз"?
Цей коментар звучить як питання про загальний принцип дизайну. Часто запитання щодо них дуже суб'єктивні, і ми не в змозі написати належної відповіді. Попереджуйте, що в цьому випадку ми можемо закрити питання.
Іноді ми маємо пояснення щодо вибору оригінального дизайну, оскільки розробники написали про них. Але у мене немає такої приємної відповіді на це питання.
Чому cp
розроблений саме так?
Проблема в тому, що Unix старше 40 років.
Якщо ви створювали нову систему зараз, ви можете зробити різні варіанти дизайну. Але зміна Unix зламає існуючі сценарії, про що йдеться в інших відповідях.
Чому було cp
розроблено, щоб мовчки перезаписати наявні файли?
Коротка відповідь - "я не знаю" :-).
Зрозумійте, що cp
це лише одна проблема. Я думаю, що жодна з оригінальних командних програм не захищена від перезапису чи видалення файлів. Оболонка має подібну проблему під час перенаправлення виводу:
$ cat first.html > second.html
Ця команда також мовчки перезаписується second.html
.
Мені цікаво подумати, як можна переробити всі ці програми. Це може зажадати певної складності.
Я думаю, що це є частиною пояснення: на початку Unix підкреслював прості реалізації . Для більш детального пояснення цього див. "Гірше - краще", пов'язане в кінці цієї відповіді.
Ви можете змінити, > second.html
щоб він зупинився з помилкою, якщо вона second.html
вже існує. Однак , як ми вже згадували, іноді користувач робить хоче замінити існуючий файл. Наприклад, вона може будувати складну команду, намагаючись кілька разів, поки вона не зробить те, що їй хочеться.
Користувач може запустити rm second.html
першим, якщо їй потрібно. Це може бути хорошим компромісом! Це має деякі можливі свої недоліки.
- Користувач повинен ввести ім'я файлу двічі.
- Люди також вникають у багато проблем із використанням
rm
. Тож я хотів би зробити і rm
більш безпечним. Але як? Якщо ми змусимо rm
показати кожне ім’я файлу і попросимо користувача підтвердити, тепер він повинен написати три рядки команд замість одного. Крім того, якщо їй доводиться робити це занадто часто, вона ввійде в звичку і надумайте "y" для підтвердження, не замислюючись. Тож це може бути дуже дратівливим, а ще може бути небезпечним.
У сучасній системі я рекомендую встановити trash
команду та використовувати її замість того, rm
де це можливо. Впровадження сховища Trash було чудовою ідеєю, наприклад, для графічного ПК для одного користувача .
Я думаю, що також важливо розуміти обмеження оригінального обладнання Unix - обмежена оперативна пам’ять та дисковий простір, вихід, який відображається на повільних принтерах , а також програмне забезпечення для системи та розробки.
Зауважте, що оригінальний Unix не завершив вкладку , щоб швидко заповнити ім'я файлу для rm
команди. (Також оригінальна оболонка Bourne не має історії команд, наприклад, наприклад, коли ви використовуєте клавішу зі стрілкою вгору bash
).
З виходом принтера, можна використовувати лінії на основі редактора ed
. Це важче засвоїти, ніж візуальний редактор тексту. Вам потрібно роздрукувати деякі поточні рядки, вирішити, як ви хочете їх змінити, і ввести команду редагування.
Використання > second.html
трохи схоже на використання команди в редакторі рядків. Ефект, який він має, залежить від поточного стану. (Якщо вона second.html
вже існує, її вміст буде відкинуто). Якщо користувач не впевнений у поточному стані, очікується, що він запуститься ls
або ls second.html
перший.
«Проста реалізація» як принцип дизайну
Існує популярна інтерпретація дизайну Unix, яка починається:
Дизайн повинен бути простим як в реалізації, так і в інтерфейсі. Важливо, щоб реалізація була простою, ніж інтерфейс. Простота - це найважливіша увага в дизайні.
...
Габріель стверджував, що "Гірше краще" виробляє більш успішне програмне забезпечення, ніж підхід MIT: Поки початкова програма в основному хороша, для її впровадження спочатку знадобиться набагато менше часу і сил, і буде легше адаптуватися до нових ситуацій. Наприклад, перенесення програмного забезпечення на нові машини стає набагато простішим. Таким чином, його використання буде швидко поширюватися, задовго до того, як [краща] програма матиме шанс бути розробленою та впровадженою (перевага першої особи).
https://en.wikipedia.org/wiki/Worse_is_better