2014-10-10 42 views
-1

就像.bash_profile在初始命令提示符之前配置我的shell一樣,並且類似於每個新終端運行.bashrc的位置,當我移動到另一個目錄時,是否可以具有等效項?移動到另一個目錄時,我可以有.bashrc嗎?

理想情況下,一個bash函數設置env變量,設置別名等。只有當我進入一個特定的目錄?

+1

查看'$ PROMPT_COMMAND'環境變量。 – pgl 2014-10-10 14:04:27

+0

從技術上講,每個新的交互式shell都運行'.bashrc',這是新終端窗口運行的最常用的命令。 '.bash_profile'是針對每個新的* login * shell運行的,默認情況下,在某些環境(Mac OS X是最重要的例子)中會出現每個新的終端窗口。 – chepner 2014-10-10 14:17:20

回答

2

您可以製作一個cd函數,並使其檢測您是否進入該特定目錄。

cd() { 
    builtin cd "[email protected]" 
    case $PWD in 
    /some/directory) . ./profilefile;; 
    esac 
} 

我不推薦這種方法,因爲這意味着即使你進入該目錄由於某種原因,這是無關的項目工作的腳本將被執行。我建議有一個特定的功能,改變到項目目錄並提供設置腳本。

myproj() { 
    cd /some/directory && . ./profilefile 
} 
0

我不知道任何Bash功能,做你所描述的。 但你可能可以通過CD

alias cd='echo Yooo ; cd' 

或更好的創建別名(或功能)欺騙(別名重要的是要避免無限循環......)

_cd() { if [ "$1" == 'toto' ]; then export TOTO=1; fi ; cd "$1"; } 
alias cd="_cd" 
1

對於交互式會話,pgl有正確的想法。下面是一個使用示例:PROMPT_COMMAND

$ cat foo 
set_environment() { 
    case "$PWD/" in 
    /tmp/*) 
     alias whatshere='echo "Only junk"' 
     ;; 
    /etc/*) 
     alias whatshere='echo "Config files: " *' 
     ;; 
    *) 
     unalias whatshere 2> /dev/null 
    esac 
} 

PROMPT_COMMAND='set_environment' 

$ source foo 

$ cd ~ 
$ whatshere 
bash: whatshere: command not found  

$ cd /tmp  
$ whatshere 
Only junk 

$ pushd /etc/apache2 # Also works when not using cd 
/etc/apache2 /tmp 
$ whatshere 
Config files: apache2.conf conf.d envvars magic (...) 
相關問題