로그인 및 대화 형 셸과 환경을 설정해야하는 이유와 설정하지 않아야하는 이유를 읽는 데 많은 시간을 보냈습니다. 다양한 프로파일 및 bashrc 파일의 변수, 쉘 함수 등. 이 게시물 에서는 프롬프트 옵션과 같은 bash 특정 항목이 ~ / .bashrc에 설정되어야한다고 언급했습니다. 이로 인해 PS1 변수에 대해 궁금해했습니다. 내가 본 모든 예에서 export PS1=""
와 같은 것이 있습니다. bash에만 의미가 있기 때문에 실제로 환경으로 내 보내야합니까? 가 의도 한 효과를 생성하지만 뭔가 빠졌는지 궁금합니다.
답변
맞습니다. PS1
는 bash의 대화 형 인스턴스에서만 의미가 있으므로 ~/.bashrc
는 내 보내지 않아야합니다. PS1
는 다른 셸에서도 의미가 있지만 프롬프트 확장은 셸마다 다르기 때문에 의미가 다릅니다. 실제로 bash 인스턴스 간에도 PS1
의 의미는 셸 옵션 (최소 promptvars
)에 따라 다르기 때문에 다른 의미를 가질 수 있습니다.
PS1
를 .profile
에서 환경으로 내보내는 것은 1970 년대의 후퇴입니다. 사용하고 (Bourne 쉘) 구성 파일이 없었습니다. 항상 동일한 쉘을 사용하고 다르게 구성하지 않는 경우에도 여전히 작동합니다. 그러나 순전히 스크립팅 용으로 설계되지 않은 모든 최신 쉘 (csh, ksh , bash, zsh,…) 대화 형으로 시작할 때 구성 파일 읽기 (.cshrc
, .kshrc
, .bashrc
, .zshrc
,…), 따라서 1970 년대 방법은 더 이상 필요하지 않습니다. 셸별 파일에서 PS1
및 기타 셸별 설정을 설정하고 환경으로 내 보내지 않으면 다른 셸 구성이나 다른 셸 또는 일반적인 프롬프트를 보여줄 수없는 다른 터미널입니다. 셸별 파일에서 PS1
를 설정하면 항상 작동하지만 .profile
내보내기는 “간단한”경우에만 작동하므로 올바른 방법으로 수행하지 않을 이유가 없습니다.하지만 웹에 대한 나쁜 자습서가 많고 배포판의 기본 구성도 잘못되었습니다. C “est la vie .
PS1
from.profile
는 비 로그인 bash 셸에서 작동합니다. ' 소싱하지 않기 때문에 작동합니까? 로그인 셸은 로그인 셸에서 분기되므로 환경을 통해PS1
를 상속합니까?-일반적으로 '의 .bashrc 파일에 표시되어 사용자 인 경우 명령 완성과 같은 항목 만로드합니다. '의 대화 형 터미널 셸입니다. 따라서 작동하는 것을 보면 동일한 로직이 셸 스크립트에 표시되므로 " 필요 " 내 보냅니다. 대신 확인해야합니다.
tty -s
또는test -t 0
를 사용하는 teractive / 터미널 사용자.PS1
테스트는 Debian '의/etc/profile
에서 오랫동안 사용되었습니다. 저는 '이 나쁜 관행이 어디서 발생했는지 모릅니다. 나는 그것이 작동하게 된 하나의 특정 사용 사례 (아마도 rlogin 또는 ssh 로그인을 감지합니까?)에서 비롯된 것 같습니다. 불행히도 다른 많은 경우에 실패하므로 여기와 다른 곳에서이 주제에 대한 많은 질문이 있습니다.CLICOLOR
및 둘 중 하나입니까? @DouglasDD는if [[-z $p1]];then return fi
.bashrc
체크인에 결함이 있음을 의미합니까?