Shell
cd 到符號連結文件的目錄
在我編寫腳本之前,任何人都知道執行以下操作的簡單方法:
$ pwd /foo/bar $ ls -l lrwxr-xr-x 1 username admin 48 Apr 17 2012 foo.sh -> /bar/foo.sh $ cd /bar $ ls foo.sh
*即,*在目錄
/foo/bar
中,我想做類似cdl
(cd link) 之類的操作,這會將我帶到連結文件的目錄(或者連結目錄,如果碰巧是這樣的話——如果是我可以輸入cd -P /bar
)。
在 zsh 中,有一個修飾符,或者說是兩個:
A
解析符號連結(使用realpath)並h
提取“頭”(即dirname
)。cd $file(:A:h)
這只有在符號沒有被破壞的情況下才有效。如果存在一串符號連結,則一直跟踪到最終目標。如果該目錄是通過符號連結到達的,那麼您將在其目標中(與 一樣
cd -P
)。如果沒有 zsh,如果你有這個
readlink
實用程序,並且你想切換到包含符號連結目標的目錄:cd -- "$(dirname -- "$(readlink -- "$file")")"
連結的目標本身可以是符號連結。如果要切換到包含連結最終目標的目錄,可以
readlink
循環呼叫:while [ -L "$file" ]; do target=$(readlink -- "$file") while case $target in */) target=${target%/};; *) false;; esac; done case $target in */*) cd -- "${target%/*}"; target=${target#**/};; esac done
在 Linux 上,假設符號連結沒有損壞,您可以使用
readlink -f
規範化路徑:t=$(readlink -f -- "$file") cd "${t%/*}"