「cd」を使用してシンボリックリンクディレクトリに移動します。現在の作業ディレクトリがフルパスになることを願っています。

「cd」を使用してシンボリックリンクディレクトリに移動します。現在の作業ディレクトリがフルパスになることを願っています。

私のホームディレクトリに~投稿しました。

ln -s Subfolder1/Subfolder2/Subfolder3

Subfolder3その後、ホームディレクトリにソフトリンクフォルダがあります。私がpushdそこに入ると、両方とも私の現在の作業ディレクトリをpwd表示します(dirs西ドイツ)になる。私のbashプロンプトにも含まれています/home/My.User.Name/Subfolder3西ドイツ、で表示されます~/Subfolder3

私は数年前にシンボリックリンクされたフォルダを使用またはcd入力pushdした後、およびを介してbashプロンプトにフルパスが表示されることを覚えています~/Subfolder1/Subfolder2/Subfolder3。簡単な設定でこの動作を復元できますか?pwddirs

答え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

これはデフォルトではないため非常にディレクトリの再帰やセマンティクスなどの..項目を難読化します。 (これはセキュリティの脆弱性と見なされる可能性があると思います。)

これが実際に対話型セッションに最適な構成であることを慎重に検討する必要があります。 (私の経験ではそうです。〜らしいそれは…あなたがそれを試みるまではそうです。 )

関連情報