
私の基本的な質問は、なぜこれらのパスの両方がホーム (つまり、~
) を指しているのでしょうか? 同じホームを指しているのでしょうか、それとも重複しているのでしょうか?
重複しているとは思えません。そうでない場合、cd ..
どのディレクトリに戻るかをどのように決定するのでしょうか?
答え1
cd ..
動作は、シェル、シェルの設定、および (この場合は可能性が高いですが) シンボリック リンクが関係しているかどうかによって異なります。
bash-4.1$ cd /var/tmp
bash-4.1$ mkdir -p real/cats
bash-4.1$ ln -s real/cats dogs
bash-4.1$ cd dogs/
bash-4.1$ pwd
/var/tmp/dogs
bash-4.1$ pwd -P
/var/tmp/real/cats
bash-4.1$ cd ..
bash-4.1$ pwd
/var/tmp
bash-4.1$ set -o physical
bash-4.1$ cd dogs
bash-4.1$ pwd
/var/tmp/real/cats
bash-4.1$ cd ..
bash-4.1$ pwd
/var/tmp/real
bash-4.1$
/var/mail
ディレクトリを調査すると、ls
おそらく Apple によって作成されたシンボリック リンクがあるかどうかが明らかになるはずです。
答え2
macOS では ( について言及されているので、これが だと思います/Users
)、 はユーザー の 形式の受信トレイ メールボックス/var/mail/username
であり、は同じユーザーのホーム ディレクトリです。mbox
username
/Users/username
通常の、変更されていないmacOSのインストールでは/var/mail/username
、ないユーザーのホームディレクトリへのシンボリックリンクにも、/Users/username
へのリンクにもなりません/var/mail/username
。
cd ..
デフォルトでは のように動作しますcd -L ..
。つまり、論理的な親ディレクトリではなく物理的な親ディレクトリ(cd -P ..
)。
ksh
macOS のマニュアルより:
デフォルトでは、ディレクトリ名を検索するときに、シンボリック リンク名は文字通りに扱われます。これは、 オプションと同等です
-L
。 このオプションにより、ディレクトリを決定するときにシンボリック リンクが解決されます。コマンド ラインのまたはの-P
最後のインスタンスによって、どの方法が使用されるかが決まります。-L
-P