Zsh
cd 從根目錄下兩級
我是一名網路開發人員(主要是 Drupal)。當我開發網站時,我會在 /workspace 文件夾中進行。
所以我有這樣的文件夾。
/workspace/project/ /workspace/project/sites/default/files/ /workspace/project1/ /workspace/project1/sites/all/modules/contrib/date
我想要一個命令將我帶到我的項目根目錄,它總是
/workspace/something/
所以當我在:
/workspace/project/sites/default/files/
$$ specialcdcommand $$將帶我去:
/workspace/project/
但是當我在:
/workspace/project1/sites/default/files/
$$ specialcdcommand $$將帶我去:
/workspace/project1/
目前我傾向於這樣做:
cd /workspace/p[tab]
…這不好,因為我有時會在沒有註意到的情況下進入不同的項目版本。
我用zsh。
specialcdcommand() cd ${(M)PWD#/*/*/}
或者:
specialcdcommand() cd ${${(M)PWD#/*/*/}:?Not deep enough}
或者:
specialcdcommand() cd "${(M)PWD#/*/*/}"
如果您還沒有超過兩個級別,則避免進入您的主目錄。
在
zsh
中,(M)
變數擴展標誌改變了${var#pattern}
運算符的行為,因此M匹配的字元串被擴展而不是被刪除。:?
是標準/Bourne 運算符,用於在變數擴展為空字元串時返回錯誤(並取消命令)。請注意,這zsh
是唯一具有一致的嵌套參數擴展方式的 shell。POSIXly:
specialcdcommand() { p=${PWD#/*/*/} [ "$p" = "$PWD" ] || cd "${PWD%"$p"}" }
或者為了避免破壞
$p
變數:specialcdcommand() { set -- "${PWD#/*/*/}" [ "$1" = "$PWD" ] || cd "${PWD%"$p"}" }