2014-10-10 2 views
-1

.bash_profile이 초기 명령 프롬프트 전에 내 쉘을 구성하는 것과 같은 방식으로 .bashrc가 모든 새 터미널에 대해 실행되는 것과 유사하게 다른 디렉토리로 이동할 때 동등한 권한을 가질 수 있습니까?다른 디렉토리로 이동할 때 .bashrc를 사용할 수 있습니까?

env 변수를 설정하고 별칭 등을 설정하는 이상적인 bash 함수 ... 특정 디렉토리를 입력 할 때만?

+1

'$ PROMPT_COMMAND' 환경 변수를 살펴보십시오. – pgl

+0

기술적으로'.bashrc'는 새로운 터미널 창에 의해 실행되는 가장 일반적인 명령 인 새로운 대화식 쉘마다 실행됩니다. '.bash_profile'은 새로운 * login * 셸마다 실행됩니다. 일부 셸 환경 (Mac OS X는 저명한 예제)에서는 기본적으로 새로운 터미널 창마다 발생합니다. – chepner

답변

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 (...) 
관련 문제