Est-ce "faire une chose à la fois"?
Ce commentaire ressemble à une question sur un principe général de conception. Souvent, les questions à ce sujet sont très subjectives et nous ne sommes pas en mesure d'écrire une réponse appropriée. Soyez averti que nous pouvons fermer les questions dans ce cas.
Parfois, nous avons une explication pour le choix de conception d'origine, car les développeurs ont écrit à leur sujet. Mais je n'ai pas une si belle réponse à cette question.
Pourquoi cp
est conçu de cette façon?
Le problème est qu'Unix a plus de 40 ans.
Si vous créez un nouveau système maintenant, vous pouvez faire des choix de conception différents. Mais changer Unix briserait les scripts existants, comme mentionné dans d'autres réponses.
Pourquoi a- t-il étécp
conçu pour remplacer silencieusement les fichiers existants?
La réponse courte est "je ne sais pas" :-).
Comprenez que ce cp
n'est qu'un problème. Je pense qu'aucun des programmes de commande d'origine protégé contre l'écrasement ou la suppression de fichiers. Le shell a un problème similaire lors de la redirection de la sortie:
$ cat first.html > second.html
Cette commande écrase également silencieusement second.html
.
Je suis curieux de savoir comment tous ces programmes pourraient être repensés. Cela peut nécessiter une complexité supplémentaire.
Je pense que cela fait partie de l'explication: les premiers Unix mettaient l'accent sur les implémentations simples . Pour une explication plus détaillée de cela, voir "pire c'est mieux", lié à la fin de cette réponse.
Vous pouvez changer > second.html
pour qu'il s'arrête avec une erreur, s'il second.html
existe déjà. Cependant , comme nous l' avons mentionné, parfois l'utilisateur ne veut remplacer un fichier existant. Par exemple, elle peut créer une commande complexe, en essayant plusieurs fois jusqu'à ce qu'elle fasse ce qu'elle veut.
L'utilisateur peut s'exécuter en rm second.html
premier s'il en a besoin. Cela pourrait être un bon compromis! Il présente certains inconvénients possibles.
- L'utilisateur doit taper le nom de fichier deux fois.
- Les gens ont aussi beaucoup de mal à utiliser
rm
. Je voudrais donc rendre la rm
sécurité aussi. Mais comment? Si nous faisons rm
afficher chaque nom de fichier et demandons à l'utilisateur de confirmer, il doit maintenant écrire trois lignes de commandes au lieu d'une. De plus, si elle doit le faire trop souvent, elle prendra une habitude et tapera «y» pour confirmer sans réfléchir. Cela pourrait donc être très ennuyeux, et cela pourrait tout de même être dangereux.
Sur un système moderne, je recommande d' installer la trash
commande et de l'utiliser plutôt rm
que possible. L'introduction du stockage Trash était une excellente idée, par exemple pour un PC graphique à utilisateur unique .
Je pense qu'il est également important de comprendre les limites du matériel Unix d'origine - RAM et espace disque limités, sortie affichée sur les imprimantes lentes ainsi que le système et le logiciel de développement.
Notez que Unix d'origine n'avait pas de tabulation , pour remplir rapidement un nom de fichier pour une rm
commande. (De plus, le shell Bourne d'origine n'a pas d'historique de commandes, par exemple lorsque vous utilisez la touche flèche vers le haut bash
).
Avec la sortie de l' imprimante, vous devez utiliser éditeur en ligne, ed
. C'est plus difficile à apprendre qu'un éditeur de texte visuel. Vous devez imprimer certaines lignes actuelles, décider comment vous souhaitez les modifier et saisir une commande d'édition.
Utiliser, > second.html
c'est un peu comme utiliser une commande dans un éditeur de ligne. Son effet dépend de l'état actuel. (S'il second.html
existe déjà, son contenu sera supprimé). Si l'utilisateur n'est pas sûr de l'état actuel, il doit s'exécuter ls
ou d' ls second.html
abord.
"Mise en œuvre simple" comme principe de conception
Il existe une interprétation populaire de la conception Unix, qui commence:
La conception doit être simple, à la fois dans la mise en œuvre et l'interface. Il est plus important que l'implémentation soit simple que l'interface. La simplicité est la considération la plus importante dans une conception.
...
Gabriel a fait valoir que "Worse is better" a produit des logiciels plus performants que l'approche MIT: tant que le programme initial est fondamentalement bon, il faudra beaucoup moins de temps et d'efforts pour le mettre en œuvre initialement et il sera plus facile de s'adapter aux nouvelles situations. Le portage de logiciels sur de nouvelles machines, par exemple, devient beaucoup plus facile de cette façon. Ainsi, son utilisation se répandra rapidement, bien avant qu'un [meilleur] programme ait une chance d'être développé et déployé (avantage du premier arrivant).
https://en.wikipedia.org/wiki/Worse_is_better