bash 프롬프트 (PS1)를 설정하면 root가 # 대신 $를 사용하는 이유는 무엇입니까?


11

CentOS 6.4에 있습니다. 기본적으로 루트 사용자의 프롬프트에는 #기호가 있습니다. 예를 들면 다음과 같습니다 [root@myserver ~]# .

echo $PS1인쇄 [\u@\h \W]\$; 그러나 내가하면 PS1="[\u@\h \W]\$"(아무것도 변경해서는 안됩니다), 나는 다음과 같은 프롬프트로 끝납니다 : [root@myserver ~]$.

왜 내가 스스로 설정하려고 할 때 (결국 더 유용한 것으로 바꾸고 싶습니다) $문자 그대로 해석 합니까? 내가 찾을 수있는 거의 모든 페이지 (예 : 방법 : 변경 / 설정 bash 사용자 정의 프롬프트 (PS1) )는 루트 사용자에게 \$결과가 있어야 한다고 말합니다 #.


PS1=[\u@\h \W]\$을 반환합니다 -bash: W]$: command not found.
choroba

@choroba oops, 죄송합니다, 큰 따옴표를 놓쳤습니다 PS1="[\u@\h \W]\$".
stripybadger

답변:


14

귀하의 질문에, 당신은 전혀 라인을 인용하지 않는다는 것을 암시합니다. 공백은 인수 "PS1 = [\ u @ \ h"를 명령 "\ W] \ $"와 분리하기 때문에 분명히 잘못되었습니다. 모든 캐릭터가 중요하다는 것을 명심하십시오.

어쨌든, 아마도 당신이하고있는 일은 작은 따옴표 ( ') 대신 큰 따옴표 ( ")를 사용하는 것입니다. 입력 한 내용을 해석하는 쉘과 관련하여 매우 다르게 행동합니다. 큰 따옴표를 사용하면 영리한 일을 시도합니다. 백 슬래시 / 일부 문자 순서이 할당의 경우, \ ​​u, \ h 및 \ W에 대해서는 특별한 것이 없기 때문에 그대로 유지됩니다. 대괄호는 다양한 위치에서 특별한 의미를 가질 수 있지만이 경우에는 그렇지 않습니다. 그래서 그것들은 제자리에 남아 있습니다; 그러나 $다양한 의미를 가지고 있기 때문에, 그것들 모두가 특별하기 때문에, \$순서는 "달러 기호의 특수성을 무시하고 그대로 두십시오"로 해석되며, 그 순서는 더 이상 구문 분석되지 않은 단일 달러 기호입니다.PS1\$쉘이 실제 프롬프트를 만들 때 마법의 순서가 아닌 문자 그대로의 달러 기호가 있기 때문에 효과적인 사용자 의존적 문자가 아닌 달러 기호 만 얻습니다. 실제 파싱은 조금 더 복잡하지만,이 특정 예제에서는 그 요점입니다.

타이핑 한 것 : PS1="[\u@\h \W]\$ "
쉘이 할당 한 것 : PS1 <- "[\u@\h \W]$ "
원하는 것 : PS1 <- "[\u@\h \W]\$ "
타이핑해야 할 것 :PS1='[\u@\h \W]\$ '

다음에 수행 할 작업 : 쉘 인용에 대해 자세히 학습 하려면 이 학습서 와 같은 것을 읽으십시오 .


1
그래, 당신은 자리에 있었고, 실수를 지적 해 주셔서 감사합니다 (원래 질문에서 누락 된 것에 대해 미안합니다).
stripybadger

당신이 이제까지 경우 어떻게 어떤 이유로 큰 따옴표를 사용하는 필요, 사용은 PS1="...\\\$"리터럴 쌍을 보장하기 위하여 \$저장됩니다 PS1쉘 나중에 해석 할 수.
chepner

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.