2009-09-03 3 views
1

가 나는 다음과 달성하고자하는 : 나는 배쉬 프롬프트에서 "CD 생산"을 실행하면, 나는 디렉토리로 이동해야하고 메시지가 표시되어야합니다디스플레이 메시지가

"당신은 생산에 ", 그래서 사용자는 경고를받습니다.

+0

비슷한 질문이 있습니다. http://unix.stackexchange.com/questions/18532/show-message-when-cd-into-specific-directory –

답변

4

셸 컨텍스트 (예 : .bashrc)에서 다음을 실행하면됩니다.

xcd() { 
    if [[ "$1" == "production" ]] ; then 
     echo Warning, you are in production. 
    fi 
    builtin cd $1 
} 
alias cd=xcd 

이 그 기능에 cd 명령 별명 다음 함수를 생성한다. 함수 자체가 경고를 제공 한 다음 실제 cd을 호출합니다. (/production 참으로 위험 지역 인 경우)

더 나은 솔루션은, 그러나, 당신이 요구 한 솔루션은 "cd /production/x"에 대한 "cd $HOME ; cd production" 및 위음성 당신에게 가양 성을 제공하기 때문에, 실제 경로를 감지 할 수 있습니다. 당신이 절대 경로로 최상위 위험 디렉토리를 구성 할 수 있습니다

#!/bin/bash 
export xcd_warn="/home/pax /tmp" 
xcd() { 
    builtin cd $1 

    export xcd_path=$(pwd) 
    for i in ${xcd_warn} ; do 
     echo ${xcd_path}/ | grep "^${i}/" 
     if [[ $? -eq 0 ]] ; then 
      echo Warning, you are in ${i}. 
     fi 
    done 
} 
alias cd=xcd 

:

내가 좋아하는 일을 할 것입니다.

+0

이것은 사용자가 요청한 사항을 수행하지만 필요한 것은 무엇인지 생각합니다. * 다른 무엇인가; 그들은 실제로 그들이 생산 디렉토리에 있는지 여부에 관심을 가져야합니다. 대신에 'cd'명령을 실행했는지 여부가 아닙니다. 대신에 pushd를 통해 들어온 경우 데이터도 마찬가지로 민감합니다. –

+0

당신은 xcd()에서'k'를 잊어 버렸습니다. – mpen

+0

@ 마크, 다음 번 스마일을 추가했는지 확인하십시오. xkcd가 기억 나기 전에 몇 초간 오류를 찾으 셨습니다 :-) D' Oh! – paxdiablo

8

그렇게하지 마십시오. :)

정말로 알고 싶은 것은 사용자가 방금 cd 명령을 통해 'production'디렉토리에 있는지 여부입니다. 당신이 정말로 알고 싶은 것은 프로덕션 데이터를 수정하는 방법과 거기에있는 방법 (cd, pushd, popd, 이미 해당 디렉토리의 부모 프로세스에서 쉘을 여는 것)과는 무관합니다.

프로덕션 디렉토리에있을 때 쉘이 불쾌한 경고를하는 것이 훨씬 더 중요합니다.

function update_prompt() { 
    if [[ $PWD =~ /production(/|$) ]] ; then 
    PS1="\[email protected]\h \w [WARNING: PRODUCTION] $" 
    else 
    PS1="\[email protected]\h \w $" 
    fi 
} 
PROMPT_COMMAND=update_prompt 

더욱 화려한 색으로 문자열을 자유롭게 바꾸십시오.