Bash

“cd”到符號連結目錄,希望目前工作目錄是完整路徑

  • February 12, 2022

在我的主目錄~中,我發出

ln -s Subfolder1/Subfolder2/Subfolder3

然後,我的主目錄中有一個軟連結文件夾Subfolder3。當我pushd進入它時,兩者都pwd顯示dirs我目前的工作目錄(cwd)為. 我的 bash 提示符還包含cwd,它顯示為./home/*My.User.Name*/Subfolder3``~/Subfolder3

我記得很多年前,在 acdpushd到一個符號連結的文件夾之後,完整路徑~/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 ) 顯示您可以在每次使用cdand時處理這個問題pushd,或者通過設置一個全域選項

cd -P path/through/symlink
pushd -P path

set -P

此全域選項切換bash為在任何地方使用真實路徑

引用自:https://unix.stackexchange.com/questions/690128