シンボリックリンクをたどった後、「cd ..」機能を復元する


13

次のようなコマンドで端末にシンボリックリンクを作成した場合

ln -s /path/to/some/directory symbolicLink

そして、リンクをたどって

cd symbolicLink

CWDがあることを考えるように端末が表示され~/symbolicLink/、それが実際に表示されていても~/path/to/some/directory/(リンクで行われたと仮定し~、もちろん)。これが意味することは、次に入力cd ..すると~、に戻されるということです。なぜなら、ターミナルはこれをcwdの親だと「考える」からです。

cd ..代わりに私を連れて行くように~/path/to/some/、私は何を変更する必要があります、すなわちの本当の~/path/to/some/directory/

回答:



5

cd -P動作には微妙な注意事項があります(長さのために回答として投稿されています):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

今何をpwd印刷すべきですか?論理的には、

  1. $dir1、場合cd -P ..ないcd ..最初とcd -- "$(readlink -f)"その後、または
  2. /tmp、場合cd -P ..ないcd -- "$(readlink -f)"最初とcd ..その後。

実際、後者を行います。つまり、pwd直感的には「親」ディレクトリよりも2レベル上位になります。


1
ありがとう!cd -Pそれでも私が直面していた問題は解決しますが、知っておくと便利です。
Val


2

私はあなたの痛みを感じます— bashこの振る舞いのために、インタラクティブな使用のために基本的に壊れていると思います。

tcshインタラクティブな使用のためのはるかにユーザーフレンドリーなシェルです。bashプログラミングに任せてください(多くのスクリプト言語の中に、より優れた代替物があるときにシェルスクリプトを書くことに固執する場合)。

任意のユーザーのシェルを変更するにchshは、コマンドラインで入力し、プロンプトに従います(繰り返しますが、/bin/tcshO'Reillyの著書cshとtcshを使用することをお勧めします。


この答えを書いてから、心配するのをやめ、インタラクティブな使用のためにBashを愛することを学びました。しかし、まだcdシンボリックリンクのデフォルトの動作を扱うことはできません。使用するマシンごとset -o physicalに、.bashrcまたは.bash_profileすべてのマシンに配置することを忘れないでください。
dodgethesteamroller
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.