私はこのようにディレクトリを設定しています
~/code
~/code/src
~/code/build -> /path/to/somewhere/else
最後のはシンボリックリンクです。
これをやれば
cd ~/code/build
ls ..
のリストが表示されます/path/to/somewhere
が、その他のコメントそして私自身の経験から言うと、私はリストに次のようなものが表示されることを期待していました~/code
。以前はこれが逆の順序で機能していたと断言できます。
Ubuntu で zsh と bash を使用しています。これには設定があるのでしょうか、それとも POSIX などに深く根付いているのでしょうか?
答え1
の問題ではありませんls
。これは、シンボリックリンクの仕組みです。 を使用すると、..
現在のディレクトリの親ディレクトリに移動できますが、ディレクトリは、シンボリックリンク経由でアクセスしたことを認識しません。この動作を防ぐには、シェルが介入する必要があります。シェル組み込み の場合、単に呼び出すだけでなく、完全なディレクトリ パスを記憶して、必要な操作を判断しようとするcd
特別な処理があります。ただし、 は組み込みではありません。期待どおりの結果を得るには、シェルはを に渡す前に別のパスに変更する必要があります。オプションを使用すると、その処理が簡単になります。chdir
ls
..
ls
zsh
CHASE_DOTS
一般的に言えば、ディレクトリへのシンボリックリンクは厄介なものです。重要な半永久的なアプリケーションの場合は、代わりに を使用してくださいmount --bind
。
答え2
質問に というタグが付いているので、zsh
このシェルについて話しているのだと思います。
oh-my-zsh
おそらく、変数CHASE_LINKS
および/または を(直接または などの外部スクリプトを使用して間接的に)設定していると思われますCHASE_DOTS
。それを確認するにはsetopt | grep -i chase
、 を実行して、それらがリストされているかどうかを確認します。リストされている場合は、設定を解除します。
unsetopt CHASE_DOTS
unsetopt CHASE_LINKS