Bash
“cd”到符號連結目錄,希望目前工作目錄是完整路徑
在我的主目錄
~
中,我發出ln -s Subfolder1/Subfolder2/Subfolder3
然後,我的主目錄中有一個軟連結文件夾
Subfolder3
。當我pushd
進入它時,兩者都pwd
顯示dirs
我目前的工作目錄(cwd)為. 我的 bash 提示符還包含cwd,它顯示為./home/*My.User.Name*/Subfolder3``~/Subfolder3
我記得很多年前,在 a
cd
或pushd
到一個符號連結的文件夾之後,完整路徑~/Subfolder1/Subfolder2/Subfolder3
將由pwd
,dirs
和 bash 提示符中顯示。恢復這種行為是一個簡單的設置嗎?
作為FeRD 答案的替代方案,對於目前工作目錄的一次性取消引用,您可以使用
pwd -P
. 不幸的是,它不適用於dirs
.對於長期解決方案,您可以定義一個 shell 函式:
cd() { command cd "$@" && command cd "$(pwd -P)" }
(將其放入您的
.bashrc
文件中。)這將導致該cd
函式執行cd
內置命令,並且如果成功,則獲取絕對路徑名和cd
那個*。* 這將導致$PWD
設置為該路徑,並將導致它顯示在 shell 提示符中。在極少數情況下,第二個
command cd
可能會失敗。在這種情況下,您應該仍然在您打算cd
進入的目錄中,但是您仍然會看到符號連結名稱(並且該cd
函式可能會向您顯示錯誤消息,即使(第一次)cd
成功也是如此)。可以想像,第二個cd
可能會將您帶出您想要進入的目錄,但我想不出會發生這種情況的場景。
文件 (
man bash
, 搜尋symbolic ) 顯示您可以在每次使用cd
and時處理這個問題pushd
,或者通過設置一個全域選項cd -P path/through/symlink pushd -P path set -P
此全域選項切換
bash
為在任何地方使用真實路徑