次のようなコマンドで端末にシンボリックリンクを作成した場合
ln -s /path/to/some/directory symbolicLink
そして、リンクをたどって
cd symbolicLink
端末は、実際に~/symbolicLink/
を表示しているにもかかわらず、cwdが~/path/to/some/directory/
であると考えているように見えます(もちろん、リンクは~
で作成されていると仮定します)。これは、「cd ..
」と入力すると、~
に戻ります。これは、端末がcwdの親であると「考える」ためです。
cd ..
が代わりに~/path/to/some/
、つまりreal~/path/to/some/directory/
の親になるように、何を変更する必要がありますか?
https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links を参照してください。
「cd -P」を使用して、「実際の」親ディレクトリに移動できます。これをデフォルトの動作にする方法については、一番上の回答の最初のコメントを参照してください。
cd -P
動作には微妙な注意事項があります(長さのために回答として投稿されています):
$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..
今何をpwd
プリントすべきですか?論理的には、
$dir1
、cd -P ..
が最初にcd ..
を実行し、その後cd -- "$(readlink -f)"
を実行する場合、または/tmp
(cd -P ..
が最初にcd -- "$(readlink -f)"
を行い、その後cd ..
を行う場合。実際、後者を行います。つまり、pwd
は直感的にtwo「親」ディレクトリよりも高いレベルです。
別の方法は、実行することです:
cd $(/bin/pwd)/..
私はあなたの痛みを感じます—この振る舞いのため、bash
はインタラクティブな使用のために基本的に壊れていると思います。
tcsh
は、インタラクティブな使用のためのはるかに使いやすいシェルです。プログラミングのためにbash
を残します(多くのスクリプト言語の中にはるかに優れた代替物があるときにシェルスクリプトを書くことを主張する場合)。
任意のユーザーのシェルを変更するには、コマンドラインでchsh
と入力し、プロンプトに従います(ここでも、/bin/tcsh
と優れたO'Reillyの本をお勧めします Using cshおよびtcsh 、何も使用しない場合に使用可能)。