ディレクトリがあり、後者が前者へのシンボリックリンクであるとし/dir1
ます/dir2/linked
。
合計をcd
実行すると、出力が表示されます。そうすれば服を着るだろう。この動作は以前にあった概念と一致します。しかし、私が理解しているように、すべてのディレクトリの親ディレクトリ()はディレクトリinodeに保存されます(たとえば、物理的にディスクにあります)。明らかにtrueなので、inodeの親ディレクトリは次のようになります。linked
pwd
/dir2/linked
cd ..
/dir2
/dir2/linked
..
/dir2/linked
/dir1
/
状況をさらに複雑にするために、内部的にと/dir2/linked
の出力が異なります! 「物理的」パスを尊重しながらシンボリックリンクパスを尊重するようです。で述べたようにls ..
cd .. ; ls .
cd
ls
この問題しかし、cd -P
このユースケースが存在します。
man pwd
「物理的」および「論理的」作業ディレクトリが記載されていますが、この時点でまだいくつかの質問があります。
PWD
この動作は、で説明されているように常に環境変数によって提供されますかman pwd
?- デフォルト
cd
とls
両方がシェルコマンド(プログラムではない)の場合、なぜ動作が異なるのですか? - 典型的ですか?プログラム
PWD
(シェルコマンドではありません)物理パスの代わりに使用できますか?実装によって異なることを知っていますが、経験上どのようなルールがありますか?
ベストアンサー1
bash
ディレクトリに入るためにシンボリックリンクを使用するときは、シンボリックリンクについて「学習」してこの情報を追跡してください。
例では、次のようにしてこれを確認できます。
$ cd /dir2
$ cd linked
$ pwd
/dir2/linked
$ PWD='' bash -c pwd
/dir1
空の変数でbashを起動する必要がありますPWD
。それ以外の場合は、そのトリックを使用して「偽の」パスを表示します。
気づくls
はい別のプログラムなので、bashは現在のディレクトリにどのように到達したのかわからないので、単にls ..
表示されます。本物フォローしているシンボリックリンクに関係なく、親ディレクトリです。
ほとんどのプログラムは環境変数に依存しませんCWD
。プログラムの起動方法はさまざまなので、bashシェルを介した方法はそのうちの1つにすぎないので、正しいCWD
値を含めることを期待することは信頼できません(CWD
実行する前に間違った値を設定してみてくださいbash -c pwd
。してください)。