cd ..どのディレクトリが..であるか、どうすればわかりますか?

cd ..どのディレクトリが..であるか、どうすればわかりますか?

ディレクトリには、現在のディレクトリと親ディレクトリへのハードリンクとディレクトリが.含まれています。..

もしそうなら、シェルは現在のディレクトリの名前が "a"であることをどのように(例えばプロンプトで)知ることができますかcd a/path/..?専用ケースありますか?

..そうでなければ、その立場では、このディレクトリが上記のディレクトリでもあるとは知らず、ただというディレクトリに入ることになるのではないだろうか。名前をどうやって知ることができますか?

ベストアンサー1

fooあなたの質問は、bashが作業ディレクトリが(代わりにfoo/bar/..)あるようにディレクトリを変更する方法を知っていると仮定しますcd foo/bar/..

どちらのパスも同じ inode で表示されますが(この回答の最後に示すようにパスにシンボリックリンクがない場合)、シェルは現在のディレクトリ名を代わりに表示するために特別なアクションを取る必要がありfooます..。では、 bashpathでcd見つかったときに内部的に親ディレクトリを削除します。つまり、ディレクトリ名にすることはできません。....

これに関する文書は次のとおりですhelp cd

..直前のパス名コンポーネントをスラッシュまたはDIRの先頭に戻して処理します。

この特別な大文字と小文字を区別すると、次のような興味深い動作が発生します(実際のパスであってもfoo/qux/..まだ次のように見えます)。foobar/baz/..

$ tree
.
|-- bar
|   `-- baz
`-- foo

3 directories, 0 files
$ ln -s "$(readlink -f bar/baz)" foo/qux
$ tree
.
|-- bar
|   `-- baz
`-- foo
    `-- qux -> bar/baz

4 directories, 0 files
$ cd foo/qux/..
$ basename "$(pwd)"
foo

おすすめ記事