web-dev-qa-db-ja.com

cdとlsは、ディレクトリへのソフトリンク内で異なる動作をします

ソフトリンクを介してdirにcdすると、次のことがわかります。

  1. ls ..は、リンクされたディレクトリの親ディレクトリの内容を表示しますが、cd ..はソフトリンクの親ディレクトリの下に移動します。なぜ違うのですか?

  2. cd ..の後にタブを付けると、リンクされたディレクトリの親ディレクトリのコンテンツにも、ソフトリンクの親ディレクトリのコンテンツにも、完了のオプションが表示されません。なんでそれ?

  3. 上記の状況で、リンクされたディレクトリまたはそのソフトリンクに対して機能するすべてのディレクトリコマンドの中で、どのようにして知ることができますか?

7
Tim

Bash(および場合によっては他のシェル)は、シンボリックリンクを含め、下降したパスを追跡して、トレイルを上に戻るように見せるためです。

cdはシェルに組み込まれている必要があるため、Bashは作業ディレクトリに到達する方法を知っています。 ls ..を実行すると、grep ..も有効であり、..の変換が非常に混乱するため、シェルは「シンボリックパス」を置き換えることができません。

現状では、シェルには現在..の2つの解釈がありますが、これはまったく役に立たなかったかのように混乱を招く可能性があります。

8
msw