ls .. はシンボリックリンクでは正しく動作しません

ls .. はシンボリックリンクでは正しく動作しません

私はこのようにディレクトリを設定しています

~/code
~/code/src
~/code/build -> /path/to/somewhere/else

最後のはシンボリックリンクです。

これをやれば

cd ~/code/build
ls ..

のリストが表示されます/path/to/somewhereが、その他のコメントそして私自身の経験から言うと、私はリストに次のようなものが表示されることを期待していました~/code。以前はこれが逆の順序で機能していたと断言できます。

Ubuntu で zsh と bash を使用しています。これには設定があるのでしょうか、それとも POSIX などに深く根付いているのでしょうか?

答え1

の問題ではありませんls。これは、シンボリックリンクの仕組みです。 を使用すると、..現在のディレクトリの親ディレクトリに移動できますが、ディレクトリは、シンボリックリンク経由でアクセスしたことを認識しません。この動作を防ぐには、シェルが介入する必要があります。シェル組み込み の場合、単に呼び出すだけでなく、完全なディレクトリ パスを記憶して、必要な操作を判断しようとするcd特別な処理があります。ただし、 は組み込みではありません。期待どおりの結果を得るには、シェルはを に渡す前に別のパスに変更する必要があります。オプションを使用すると、その処理が簡単になります。chdirls..lszshCHASE_DOTS

一般的に言えば、ディレクトリへのシンボリックリンクは厄介なものです。重要な半永久的なアプリケーションの場合は、代わりに を使用してくださいmount --bind

答え2

質問に というタグが付いているので、zshこのシェルについて話しているのだと思います。

oh-my-zshおそらく、変数CHASE_LINKSおよび/または を(直接または などの外部スクリプトを使用して間接的に)設定していると思われますCHASE_DOTS。それを確認するにはsetopt | grep -i chase、 を実行して、それらがリストされているかどうかを確認します。リストされている場合は、設定を解除します。

unsetopt CHASE_DOTS
unsetopt CHASE_LINKS

関連情報