私のホームディレクトリに~
投稿しました。
ln -s Subfolder1/Subfolder2/Subfolder3
Subfolder3
その後、ホームディレクトリにソフトリンクフォルダがあります。私がpushd
そこに入ると、両方とも私の現在の作業ディレクトリをpwd
表示します(dirs
西ドイツ)になる。私のbashプロンプトにも含まれています/home/My.User.Name/Subfolder3
西ドイツ、で表示されます~/Subfolder3
。
私は数年前にシンボリックリンクされたフォルダを使用またはcd
入力pushd
した後、およびを介してbashプロンプトにフルパスが表示されることを覚えています~/Subfolder1/Subfolder2/Subfolder3
。簡単な設定でこの動作を復元できますか?pwd
dirs
答え1
ドキュメント(man bash
、検索象徴的なcd
)は、およびを使用するたびにpushd
またはグローバルオプションを設定してそれを処理できることを示します。
cd -P path/through/symlink
pushd -P path
set -P
このグローバルオプションは、bash
どこでも実際のパスを使用するように切り替えられます。
答え2
代わりにフェザーの答え、現在の作業ディレクトリへのワンタイム逆参照に使用できますpwd -P
。残念ながら動作しませんdirs
。
長期的なソリューションのためにシェル機能を定義できます。
cd() {
command cd "$@" && command cd "$(pwd -P)"
}
(これを.bashrc
ファイルに入れます。)これにより、cd
関数は組み込みコマンドを実行しcd
、成功すると絶対パス名を取得してcd
実行します。それ。 これにより$PWD
パスが設定され、シェルプロンプトに表示されます。
まれに、2番目の操作がcommand cd
失敗する可能性があります。この場合、必要なディレクトリに続ける必要がcd
ありますが、シンボリックリンク名は引き続き表示されます(そしてcd
関数が成功してもcd
(最初)エラーメッセージを表示することができます)、おそらく2番目の人がcd
あなたを連れて行くかもしれません。出るあなたが入れたいディレクトリ。しかし、このようなことが起こりうるシナリオは思い出せません。
答え3
ワンタイム逆参照に推奨されるrealpath
ユーティリティもあります。
[ferd ~]$ cd /var/tmp/
[ferd tmp]$ ln -s /home/ferd/Videos MyVideos
[ferd tmp]$ cd MyVideos
[ferd MyVideos]$ pwd
/var/tmp/MyVideos
[ferd MyVideos]$ realpath .
/home/ferd/Videos
ディレクトリを自動的にrealpath
設定するのは通常zshのシェルオプションですCHASE_LINKS
。
これはデフォルトではないため非常にディレクトリの再帰やセマンティクスなどの..
項目を難読化します。 (これはセキュリティの脆弱性と見なされる可能性があると思います。)
これが実際に対話型セッションに最適な構成であることを慎重に検討する必要があります。 (私の経験ではそうです。〜らしいそれは…あなたがそれを試みるまではそうです。 )