すべてのディレクトリに「..」点があるのはなぜですか? [コピー]

すべてのディレクトリに「..」点があるのはなぜですか? [コピー]

歴史的な質問です。私はこの質問に対する答えを見つけようとしましたが、運がありませんでした。

すべてのディレクトリに「。」と「..」が含まれ、ROOT(/)にも「..」が含まれています。ところで、なぜそうなのでしょうか?私の限られた観点では、どちらも不要に見えます。

  1. 現在のディレクトリでスクリプトを実行します./script.sh。しかし、"."が存在しない場合bash script.sh

  2. 親ディレクトリに移動しますcd ..。しかし、「..」が存在しない場合cd --parent 1(親ディレクトリに移動)のようなコマンドがある可能性があります。

したがって、点と点は必須ではなく速記のようです。

欠点は、「.」という名前のファイルが生成されないことです。または「..」。また、ドットで始まるファイルを一覧表示/操作する方が難しく、エラーが発生しやすくなります。

rm -r .* # delete current and parent directory?

明らかに言えば、私は変化を求めるものではありません。私たちがどのようにここまで来るのか気になります。この2つのディレクトリを参照する他の方法ではなく、なぜこの選択​​が行われたのですか?

編集:一部の人々は改善方法についてのフィードバックを提供せずに私の質問に投票しました。

ベストアンサー1

.ディレクトリは..POSIX Unix仕様の一部です。

コマンドなしで動作するようにコマンドを変更することを提案すると、状況がより複雑になります。歴史的な理由もあります。

.現在のディレクトリを参照する必要がない場合はどうすればよいですか?たぶん空の文字列がありますか?親ディレクトリを使用する..ことは近道のように見えますが、それを使用しないようにシステムのすべてのコマンドにオプションを追加することも良い解決策ではありません。一部の(歴史的)システムは両方の親...ディレクトリを参照する必要がありますが、これは単にシェルショートカットです。

ディレクトリ..は相対パス名に役立ちます。これはコンテンツを移植可能にするのに最適な方法で、フルパス名をハードコーディングするよりも優れています。

通常、この.ディレクトリは$PATHcdしたがって、デフォルトのパスから削除され、現在のディレクトリで何かを実行したい場合./commandbash command代わりに、1つではなく2つのプロセスが開始されることを明示的に実行する必要があります。

おすすめ記事