$가 사용자 셸의 기본 기호이고 #이 루트 셸의 기본 기호인 이유는 무엇입니까?

$가 사용자 셸의 기본 기호이고 #이 루트 셸의 기본 기호인 이유는 무엇입니까?

서버에서 표준 bash 셸을 작동하면 PS1 프롬프트는 기본적으로 루트가 아닌 사용자의 경우 $로 끝나고 루트의 경우 #으로 끝납니다.

즉:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

왜 이런거야?

답변1

역사적으로 원래 /bin/sh Bourne 쉘은 $일반 프롬프트와 #루트 사용자 프롬프트로 사용되었습니다(그리고 csh는 를 사용했습니다 %). 이를 통해 슈퍼유저로 실행 중인지 아닌지를 쉽게 알 수 있습니다.

#는 주석 문자이기도 하므로 맹목적으로 데이터를 다시 입력하는 사람은 실제 명령을 실행하지 않습니다.

보다 현대적인 쉘(예: ksh, bash)은 이러한 구별을 계속 $하지만 #사용자 이름, 호스트 이름, 디렉토리와 같은 더 복잡한 값을 설정할 수 있는 경우에는 덜 중요합니다. :-)

답변2

전통.

POSIX 표준에 따르면(내 강조점):

PS1

이 변수는 대화형 프롬프트에 사용됩니다. 역사적으로 "수퍼유저"는 #. 권한은 모놀리식일 필요가 없으므로 어떤 권한이 대체 프롬프트를 발생시켜야 하는지 정의하기가 어렵습니다.그러나 충분히 강력한 사용자에게는 대체 프롬프트를 통해 해당 기능을 상기시켜야 합니다.

또한보십시오이 답변SuperUser 포럼에서도 거의 동일한 질문을 했습니다.

관련 정보