2

次のコマンドを実行するとします。

$ mkdir -pa / b
$ ln -sa / bc
$ cd c

次に、ディレクトリcで、ディレクトリals ..の内容を表示するのに、元のディレクトリに戻るのはなぜですか。cd ..

4

1 に答える 1

2

シェルは、ディスク上のフォルダの実際のレイアウトを反映する物理パスと、シンボリックリンクを考慮した論理パスの2種類のパスを区別します。作業ディレクトリをc(ではなくa/b)に変更すると、シェルは現在のディレクトリへの論理パスが~/c(ホームディレクトリにあると仮定しaて)であり、物理パスがであると認識します~/a/b

例でlsは、の内容を示しています。aこれ..は、の物理的な親ディレクトリの実際のファイルシステムエントリですc。一方、作業ディレクトリはシェルの概念でありcd、シェルの組み込みコマンドです。シェルは、cは単なる別名ですがa/b、作業ディレクトリは具体的にはであり、ではcないことを認識していa/bます。したがって、..物理的にではなく論理的に解析します。

POSIX標準では、コマンドのオプション-L-Pオプションを指定して、cdどのパスをたどるかを明示的に指定できるようにします。あなたの例では、の代わりにcd c; cd -P ..あなたを入れるべきです。~/b~

于 2013-03-26T17:53:10.037 に答える