Bash

使用 CDPATH=’.:/some/path’ 時,如何禁止列印子目錄的完整路徑?

  • September 5, 2021

我想使用 bashCDPATH指向我經常訪問的目錄的符號連結目錄。但是,這樣做:

CDPATH="~/symlinks"

如果兩者都存在,則導致cd SUBDIR停止工作;目錄優先於目前工作目錄。./SUBDIR``~/symlinks/SUBDIR``CDPATH

我試圖通過使用以下方法來解決此問題:

CDPATH=".:~/symlinks"

這確實解決了優先級問題,但現在cding 到子目錄總是列印其完整路徑:

$ pwd
/foo/bar
$ cd baz
/foo/bar/baz

這有點煩人。我知道我可以通過執行來抑制所有cd輸出alias cd='> /dev/null cd'CDPATH,但我確實喜歡為其他條目(或執行時)列印的路徑cd -。有什麼更好的我可以做的嗎?

兩條線索:

  • 如果CDPATH不存在或為空字元串,則cd SUBDIR可以正常工作並且不會列印額外的 spew。
  • bash 手冊頁說:

該變數CDPATH 定義目錄的搜尋路徑,其中包含 : 搜尋dir每個目錄名稱 。中的替代目錄名稱用冒號 ( ) 分隔。空目錄名稱與目前目錄相同,即“.”。CDPATH``dir``CDPATH``:``CDPATH

聯機幫助頁似乎過於簡單:顯然空目錄名稱(即空字元串)與因為生成額外輸出但不會完全相同。但是,由於空目錄在 中是合法的,並且由於空目錄不會產生額外的輸出,因此我們可以使用:.``CDPATH=.``CDPATH=``CDPATH

# The first entry is intentionally an empty string.
CDPATH=":~/symlinks"

測試(使用 bash 4.4.12)確認其行為符合預期:cd SUBDIR更改為./SUBDIR而不是 to~/symlinks/SUBDIR並且不列印任何額外的 spew。

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