2012-03-06 54 views

回答

2

您可以在.bashrc它覆蓋創建一個函數cd指令:

cd() { 
    # "[email protected]" to preserve quoting/whitespace 
    builtin cd "[email protected]" 
    [ -f ".myapprc" ] && source .myapprc 
} 
+0

使用'「$ @」'而不是'「$ *」'來避免引用問題。 – 2012-03-06 08:51:19

3

看起來像你想要源.myapprc只要你改變目錄。

有兩種途徑可以使用,我可以想到 - PROMPT_COMMANDDEBUG陷阱。

要與第一做到這一點,你會運行下面的一次:

PROMPT_COMMAND="[ -f .myapprc ] && . .myapprc" 

,並與第二:

trap "[ -f .myapprc ] && . .myapprc" DEBUG 

這些將再次源文件爲每一個提示,所以如果源文件是昂貴的,你可以擴展它來檢查$PWD是否已經改變。

您也可以覆蓋cd,但是這可能會破壞某些shell腳本:

alias cd=cd_ 
function cd_ 
{ 
    \cd "[email protected]" 
    local ret=$? 
    [ -f .myapprc ] && . .myapprc 
    return $ret 
} 

但真正做任何的這些是不是一個好主意 - hey're,因爲你都巨大的安全漏洞」無論你當前的工作目錄是什麼,最終都會運行.myapprc中的任何命令。


後期編輯的約阿希姆 - 使用此與PROMPT_COMMAND/trap解決方案可避免.myapprc的過度執行下列要求: PROMPT_COMMAND='if [ -f .myapprc -a "$PWD" != "$PWDLAST" ]; then PWDLAST="$PWD"; source .myapprc; fi'


+1

+1提到安全風險 – 2012-03-06 08:52:14

1

您可以使用direnv根據您的工作目錄自定義您的環境。它在http://direnv.net

+0

該網站已關閉。 – Alagu 2012-03-08 13:16:44

+0

看起來它移動到github。嘗試https://github.com/zimbatm/direnv – rlduffy 2012-03-08 16:29:50