macOSで奇妙なCDの動作を説明する方法は?

macOSで奇妙なCDの動作を説明する方法は?

私のシステムはmacOS 13.2.1で、シェルはoh-my-zshです(bashでも同じ動作)。cdコマンドで奇妙な動作が見つかりました。現在のディレクトリを無効なディレクトリに変更します。正しいパスにディレクトリがないため、これはソフトリンクによって発生しません。

!w /Library/TeX/texbin ........................................................................................................... 14:56:24
> cd ../../texmf-dist

!w /usr/local/texlive/2021/texmf-dist ............................................................................................ 14:56:40
> cd -               
/Library/TeX/texbin

!w /Library/TeX/texbin ........................................................................................................... 14:56:42
> cd ../../          

!w /Library ...................................................................................................................... 14:56:51
> cd texmf-dist      
cd: no such file or directory: texmf-dist

答え1

あいまいさを引き起こす/Library/TeXシンボリックリンクに言及しています。/usr/local/texlive/2021/universal-darwin/

/Library/TeX/texbin(実際に)入って/usr/local/texlive/2021/universal-darwin/texbin実行すると、cd ../..シェルはリンクが存在することを確認します/Library/texmf-dist。つまり、リンクへのアクセスに使用したパスを記憶し、各パス要素を削除して、実行された..ステップリンクを効果的に元に戻します。結局入って存在/Library/Library/texmf-distないのでcd結局は働きません。

同様に、cd ../../texmf-dist行こうとします/Library/texmf-distが、存在しません。ただし、ここではシンボリックリンクを覚えておらず、パスが実際の場所に適していることを確認します。/usr/local/texlive/2021/texmf-distシェルがシンボリックリンクを介してパスを忘れる必要があるため、パスがどのように完全に変更されるかを確認してください。

戻って/Library/TeX/texbin実行すると、シンボリックリンクをもう一度忘れて「物理」パスを使用し、再びうまく機能しますcd -P ../../usr/local/texlive/2021cd texmf-dist

構造は次のとおりです。違いは、..上に移動したときに選択したパスから来ますuniversal-darwin(他のディレクトリはシンボリックリンクではないと仮定します)。

/Library -> Tex - - - -(symlink)- - +
                                    v
/usr -> local -> texlive -> 2021 -> universal-darwin -> texbin
                              |
                              +---> texfmt-dist

シェルがユーザーが使用するシンボリックリンクを記憶する方法は、ユーザビリティ機能です。これは、多くの場合、より良い名前でシンボリックリンクを作成し、1時間検索できる場合は、何かが実際にどこにあるかを覚える必要がないことを意味します。他~/thingyよりも/net/fileserver1/disk02/dir/thingy覚えやすいです。

ただし、これはディレクトリツリーがそうでないことを意味します。もはや「上」があいまいになります。

したがって、シンボリックリンクターゲットが「超過」すると、競合が発生する可能性があります。特に、シェルから起動されたプログラムは、シェルがシンボリックリンクの内容を覚えていることを知らず、常に「物理的」親ディレクトリを使用します。たとえば、あなたの場合、/Library/TeXシンボリックリンクでls ..実行するとcd ..; ls

関連情報