Zsh

cd 從根目錄下兩級

  • January 26, 2019

我是一名網路開發人員(主要是 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"}"
}

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