명령 프롬프트 변경-변수는 리터럴이며 .bashrc 또는 .bash_profile로 변경해도 차이가 없습니다.


4

OS X 10.8 / Mountain Lion에서 명령 프롬프트를 변경하려고합니다. ~ / .bashrc 및 ~ / .bash_profile을 변경해도 아무런 차이가 없습니다. 처럼:

export PS1="\W \$"

기본적으로 호스트 이름 ( "\ h \ %")입니다. 터미널에서 PS1을 설정하려고해도 다음과 같이 변경되지만 문자 그대로 변수가 표시됩니다.

ws10% PS1="\W \$"
\W $

(ws10이 호스트 이름 임)

~ / .bashrc 파일 :

export PS1="\W \$ "

어떤 아이디어? 디렉토리 구조를 위아래로 움직일 때 계속 길을 잃습니다! 고마워


bashrc프롬프트가 변경되어 홈 디렉토리에서 소스가 제공되는 것은 분명 합니다. 이 시점에서 시스템 bashrc을 복사하여 /etc새로 시작 하는 것이 좋습니다 . PS1변수를 복사 한 후 편집하십시오 .
ephsmith

bashrc가 소스 화되고 있다고 생각하지 않습니다 ... bashrc의 변경 사항이 터미널에 전혀 표시되지 않습니다. 위의 변경은 명령 프롬프트에서 문자 그대로 PS1을 입력 한 것입니다
John Harper

괜찮아. 잠재적으로 다른 문제입니다. ~/.profile정말 좋은 곳입니다. 어쨌든 PS1명령 줄에서 내 보내면 업데이트가 표시 됩니다. 이상한.
ephsmith

답변:


5

일반적으로 Mac OS X에서는 .bash_profile새 터미널을 시작할 때만 실행됩니다. 일반적인 해결책은 다음과 같이 한 파일을 다른 파일로 소싱하는 것입니다 ~/.bashrc.

[ -r ~/.bash_profile ] && source ~/.bash_profile

그 외에도 .bash_profile에 넣으면 예제가 완벽하게 작동합니다. 여전히 문제가 발생하면 다른 것을 간과하고 있습니까?


그러나 PS1Mac OS의 기본값 은에서 설정되어 /etc/bashrc있습니다. 조건부로 수행됩니다. 즉, PS1존재하는 경우 (로그인 쉘) PS1값이 할당됩니다. 에서 일어나는 모든 것 bashrc.
ephsmith

@ephsmith, 내 요점은 ~ / .bashrc는 일반적으로 새 셸을 시작할 때 실행되지 않습니다.
Gerry

profile또는 bash_profile로 이동하여 bashrc어떤 일이 발생하는지 보십시오 . 로그인 쉘뿐만 아니라 모든 쉘에 적용됩니다.
ephsmith

@ephsmith, 나는 / etc / bashrc가 아니라 ~ / .bashrc에 대해 이야기하고있다
Gerry

또한 / etc / bashrc는 / etc / profile에서 제공되므로 모든 쉘에서 실행됩니다.
Gerry

2

오래된 Mac에서 .bashrc와 .profile을 복사 했는데이 문제가 발생했습니다. .bashrc가 "xterm-color"라는 특정 터미널 에뮬레이션 이름을 확인하고 있다는 사실이 밝혀졌습니다. Mountain Lion에서 xterm-color의 이름이 xterm-16color로 바뀌고 새로운 xterm-256color 에뮬레이터가 추가되었습니다.

.bashrc 에이 검사가 있는지 확인하십시오.

case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

새 용어 이름을 추가하면 다음과 같습니다.

case "$TERM" in
    xterm-color)    color_prompt=yes;;
    xterm-16color)  color_prompt=yes;;
    xterm-256color) color_prompt=yes;;
esac

0

내 .bashrc는 다음과 같이 읽습니다.

PS1="\[\e[0;32m\]\u@monkey:\w\$ \[\e[0m\]" 

즉, PS1 설정 앞에 '내보내기'가 없습니다. 도움이 되나요? 반드시 지정한 프롬프트가 표시됩니다. 또한이 라인

source ~/.bashrc

.bash_profile에서 .bashrc에 프롬프트를 설정하면 도움이됩니다.


PS1="\[\e[0;32m\]\u@monkey:\w\$ \[\e[0m\]"\[\e[0;32m\]\u@monkey:\w$ \[\e[0m\]터미널에서 복사 / 붙여 넣기 한 새로운 명령 프롬프트를 표시합니다 .
John Harper

유일한 차이점은 내보내기가 없으면 하위 프로세스에서 프롬프트가 설정되지 않는다는 것입니다 (예 /bin/bash: 새 셸을 시작 하기 위해 실행할 때 ).
Gerry

다음의 프롬프트 정의는 다음과 같습니다. if [ "$ PS1"]; </ prompt /> fi?
user1256923

/ etc / bashrc는 다음으로 시작합니다 : if [-z "$ PS1"]; 그런 다음 fi PS1 = '\ h : \ W \ u \ $'를 반환
John Harper

왜 fi가 PS1 정의 앞에 있습니까? 또한 -z는 어떻습니까?
user1256923

0

에서 .bash_profile에 줄 마지막에 다음 추가 :

[ -r ~/.profile ] && source ~/.profile

그로 인해 Mountain Lion에서 다시 작동하게되었습니다.


또는 ~ / .profile의 내용을 ~ / .bash_profile으로 이동하십시오. ~ / .bash_profile과 ~ / .profile이 모두 존재하면 bash는 ~ / .bash_profile이 대화식 로그인 쉘로 호출 될 때만 읽습니다.
Lri November
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.