「一度に一つのことをする」のですか?
このコメントは、一般的な設計原理に関する質問のように聞こえます。多くの場合、これらに関する質問は非常に主観的であり、適切な回答を書くことができません。この場合、質問を終了する可能性があることに注意してください。
開発者がそれらについて書いているため、元の設計の選択について説明があります。しかし、私はこの質問に対するそのような良い答えを持っていません。
なぜcp
このように設計されているのですか?
問題は、Unixが40年以上経過していることです。
今すぐ新しいシステムを作成している場合は、さまざまな設計を選択できます。しかし、他の回答で述べたように、Unixを変更すると既存のスクリプトが壊れます。
なぜれた cp
静か上書き既存のファイルに設計されましたか?
短い答えは「わからない」です:-)。
それcp
が唯一の問題であることを理解してください。オリジナルのコマンドプログラムはどれもファイルの上書きや削除から保護されていないと思います。シェルには、出力のリダイレクト時に同様の問題があります。
$ cat first.html > second.html
また、このコマンドはを静かに上書きしますsecond.html
。
これらすべてのプログラムをどのように再設計できるかを考えることに興味があります。多少複雑になります。
これは説明の一部だと思います:初期のUnixは単純な実装を強調していました。これについてのより詳細な説明については、この回答の最後にリンクされている「悪いほど良い」を参照してください。
既に存在する> second.html
場合、エラーで停止するように変更できsecond.html
ます。ただし、前述したように、ユーザーが既存のファイルを置き換えたい場合があります。たとえば、彼女は複雑なコマンドを作成し、必要なことをするまで何度か試行することがあります。
ユーザーはrm second.html
、必要に応じて最初に実行できます。これは良い妥協かもしれません!独自の欠点がいくつかあります。
- ユーザーはファイル名を2回入力する必要があります。
- また、人々は多くのトラブルに直面し
rm
ます。だから私rm
も安全にしたいと思います。しかし、どのように?rm
各ファイル名を表示してユーザーに確認を求めると、ユーザーは1行ではなく3行のコマンドを記述する必要があります。また、頻繁にこれをしなければならない場合、彼女は習慣になり、「y」を入力して考えずに確認します。そのため、非常に迷惑であり、それでも危険です。
最新のシステムでは、trash
コマンドをインストールし、rm
可能であれば代わりに使用することをお勧めします。ごみ箱ストレージの導入は、シングルユーザーのグラフィカルPCなどの素晴らしいアイデアでした。
オリジナルのUnixハードウェアの制限を理解することも重要だと思います-限られたRAMとディスク容量、遅いプリンターで表示される出力 、システムと開発ソフトウェア。
元のUnixにはコマンドのファイル名をすばやく入力するためのタブ補完がないことに注意してくださいrm
。(また、元のBourneシェルには、コマンド履歴がありません。たとえば、上矢印キーを使用する場合などbash
)。
プリンター出力では、行ベースのエディターを使用しますed
。これは、視覚的なテキストエディタよりも学習が困難です。現在の行をいくつか印刷し、変更方法を決定して、編集コマンドを入力する必要があります。
使用> second.html
は、ラインエディタでコマンドを使用するのに少し似ています。その効果は、現在の状態によって異なります。(second.html
既に存在する場合、そのコンテンツは破棄されます)。ユーザーは、現在の状態が不明である場合は、彼女を実行するために期待されているls
か、ls second.html
最初に。
設計原則としての「単純な実装」
Unixデザインの一般的な解釈があります。
設計は、実装とインターフェースの両方でシンプルでなければなりません。実装がインターフェースよりも単純であることがより重要です。シンプルさは、設計において最も重要な考慮事項です。
...
ガブリエルは、「悪いほど良い」はMITのアプローチよりも成功したソフトウェアを生み出したと主張しました。最初のプログラムが基本的に良好である限り、最初に実装する時間と労力がはるかに少なくなり、新しい状況に適応しやすくなります。たとえば、新しいマシンへのソフトウェアの移植は、この方法ではるかに簡単になります。そのため、[より良い]プログラムが開発および展開される機会を得るずっと前に、その使用は急速に広がります(先発者の利点)。
https://en.wikipedia.org/wiki/Worse_is_better