Bash
使用 CDPATH=’.:/some/path’ 時,如何禁止列印子目錄的完整路徑?
我想使用 bash
CDPATH
指向我經常訪問的目錄的符號連結目錄。但是,這樣做:CDPATH="~/symlinks"
如果兩者都存在,則導致
cd SUBDIR
停止工作;目錄優先於目前工作目錄。./SUBDIR``~/symlinks/SUBDIR``CDPATH
我試圖通過使用以下方法來解決此問題:
CDPATH=".:~/symlinks"
這確實解決了優先級問題,但現在
cd
ing 到子目錄總是列印其完整路徑:$ 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。