bashrc PS1 check [ "$PS1" = "\\s-\\v\\\$ " ]는 무엇을 의미합니까?

bashrc PS1 check [ "$PS1" = "\\s-\\v\\\$ " ]는 무엇을 의미합니까?

Fedora/Red Hat의 /etc/bashrc 파일에 다음 줄이 표시됩니다.

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "

어떤 테스트가 진행되고 있나요 [ "$PS1" = "\\s-\\v\\\$ " ]? 테스트가 성공한 경우에만 PS1이 설정되는 이유는 무엇입니까?

답변1

\s-\v\$␣ 기본 프롬프트 문자열입니다, PS1설정되지 않은 경우 Bash가 대화식으로 시작될 때 설정되는 값입니다. 여기에는 셸 프로세스의 기본 이름(일반적 bash으로 또는 sh), 버전 및 달러 기호(예: )가 표시됩니다 bash-4.4$. (또는 if #대신 a를 사용 $하고 루트로 실행합니다.)

더 유용한 프롬프트를 설정하려는 아이디어인 것 같지만, 다른 시작 파일이 이미 설정한 경우에는 그렇지 않습니다.

"\\s-\\v\\\$ "큰따옴표로 묶인 문자열 내의 특정 값은 \x특별한 의미를 갖기 때문에 백슬래시가 두 배로 표시됩니다 x. \\리터럴 백슬래시를 명시적으로 나타냅니다. (어떤 이유로 그들은 숙제를 그렇게 하지 않았지만).

작은따옴표로 묶은 문자열을 사용하면 백슬래시를 더 쉽게 읽을 수 있습니다.

[ "$PS1" = '\s-\v\$ ' ] && PS1='[\u@\h \W]\$ '

답변2

수행되는 검사는 문자열 비교입니다 =. $PS1의 값을 문자열 \s-\v\$에서 백슬래시를 이스케이프해야 하는 문자열과 비교하여 다음 문자를 이스케이프하려고 시도하는 대신 실제 백슬래시와 비교합니다.

&&구문은 이전 테스트가 성공한 경우에만 PS1을 설정하는 부분입니다.

여기의 전반적인 논리는 분명히 PS1이 이전에 특정 값으로 설정된 경우에만 PS1을 업데이트하는 것입니다.

답변3

(이런 스웨그라서 답변으로 넣을까 말까 고민했는데, 거기까지...)

단지 이론일 뿐이지만 첫 번째 양식(예: bash-3.2.1$)은 루트 또는 다른 "비사용자" 계정으로 로그인할 때 자주 표시되는 프롬프트와 비슷합니다. 두 번째로 중요한 형식(예: [joeblow@myhost /tmp]$)은 보다 사용자 중심적입니다. 따라서 이는 시스템 계정에서 사용자 계정으로 이동할 때 이를 감지한 다음에만 보다 적절한 프롬프트로 변경하는 것입니다. 그렇지 않으면 누군가가 현재 프롬프트를 유지하고 싶어한다고 가정하십시오.

답변4

비교는 쉘이 대화형 세션인지 확인하는 것이라고 생각합니다. \s-\v$$PS1 var가 bash-5.0$내 컴퓨터에서 평가됩니다. 여기에서 차이점을 확인하세요.

Jonathans-Air:~ lirum$ bash
bash-5.0$ echo "$PS1"
\s-\v\$
bash-5.0$ exit
exit
Jonathans-Air:~ lirum$ echo "$PS1"
\h:\W \u\$

관련 정보