就像.bash_profile在初始命令提示符之前配置我的shell一樣,並且類似於每個新終端運行.bashrc的位置,當我移動到另一個目錄時,是否可以具有等效項?移動到另一個目錄時,我可以有.bashrc嗎?
理想情況下,一個bash函數設置env變量,設置別名等。只有當我進入一個特定的目錄?
就像.bash_profile在初始命令提示符之前配置我的shell一樣,並且類似於每個新終端運行.bashrc的位置,當我移動到另一個目錄時,是否可以具有等效項?移動到另一個目錄時,我可以有.bashrc嗎?
理想情況下,一個bash函數設置env變量,設置別名等。只有當我進入一個特定的目錄?
您可以製作一個cd函數,並使其檢測您是否進入該特定目錄。
cd() {
builtin cd "[email protected]"
case $PWD in
/some/directory) . ./profilefile;;
esac
}
我不推薦這種方法,因爲這意味着即使你進入該目錄由於某種原因,這是無關的項目工作的腳本將被執行。我建議有一個特定的功能,改變到項目目錄並提供設置腳本。
myproj() {
cd /some/directory && . ./profilefile
}
我不知道任何Bash功能,做你所描述的。 但你可能可以通過CD
alias cd='echo Yooo ; cd'
或更好的創建別名(或功能)欺騙(別名重要的是要避免無限循環......)
_cd() { if [ "$1" == 'toto' ]; then export TOTO=1; fi ; cd "$1"; }
alias cd="_cd"
對於交互式會話,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 (...)
查看'$ PROMPT_COMMAND'環境變量。 – pgl 2014-10-10 14:04:27
從技術上講,每個新的交互式shell都運行'.bashrc',這是新終端窗口運行的最常用的命令。 '.bash_profile'是針對每個新的* login * shell運行的,默認情況下,在某些環境(Mac OS X是最重要的例子)中會出現每個新的終端窗口。 – chepner 2014-10-10 14:17:20