ディレクトリへの絶対パスを使用してシンボリックリンク(Blink)を作成しました。次の例のツリーがあります。
$ ls -l /tmp/A
total 0
lrwxrwxrwx 1 root root 6 Apr 3 12:27 Blink -> /tmp/B
-rw-r--r-- 1 root root 0 Apr 3 12:27 foo
$ ls -l /tmp/B
total 0
-rw-r--r-- 1 root root 0 Apr 3 12:27 bar
次に、/tmp/Aに移動してディレクトリをBlinkに変更します。
$ cd /tmp/A
$ pwd
/tmp/A
$ cd Blink
$ pwd
/tmp/A/Blink
cd ..
返します/tmp/A
が、たとえば入力するとls ../foo
エラーが発生します。
ls: ../foo: No such file or directory
組み込みのcdコマンドは必要に応じてパスをチェックしますが、外部lsは..を/tmp/Bの上にあるものとして扱うため、fooを見つけることができません。
ここで問題は何ですか?相対パス(例:../foo)を介して/ tmp / A / Blinkからfooファイルをインポートできますか?
ベストアンサー1
シェルは現在の作業ディレクトリをに保存します$PWD
。これがシェル組み込みcd
および用途でありpwd
、ご覧のようにシンボリックリンクを一般ディレクトリとして処理します。時には役に立つこともあり、そうでない時もあります。
以下を使用して実際のディレクトリを見つけることができますpwd
(help pwd
詳細については入力してください)。
$ pwd
/tmp/A/Blink
$ pwd -L
/tmp/A/Blink
$ pwd -P
/tmp/B
繰り返しますが、cd
オプションがあります-P
(再び、help cd
友達です)。
$ cd /tmp/A/Blink
$ pwd
/tmp/A/Blink
$ cd -P ..
$ pwd -P
/tmp
最後に、「機能」を完全にオフにすることができます。
$ set -P
$ cd /tmp/A/Blink
$ pwd
/tmp/B