이해하는 데 어려움을 겪고 있습니다.
- 어떻게 파싱되나요
.bashrc
? - Bash 함수 구성 방법
터미널 프롬프트를 사용자 정의하려고 합니다. 사용 방법 .bashrc
은 다음과 같습니다 PROMPT_COMMAND
(실제로는 훨씬 더 복잡합니다).
function prompt_command {
PS1="-> "
}
PROMPT_COMMAND=prompt_command
이 솔루션은 파일 외부에서 숨겨져야 하는 쉘 네임스페이스를 복잡하게 만들기 때문에 마음에 들지 않습니다 (그러나 프롬프트가 중단되기 때문에 prompt_command
사용할 수 없습니다 ).unset
그래서 PROMPT_COMMAND
다음과 같이 일반 텍스트를 설정할 수도 있다는 것을 알았습니다.
PROMPT_COMMAND='PS1="-> "'
내가 말했듯이 내 프롬프트 명령은 실제로 훨씬 더 복잡합니다. 그러므로 나는 이 대안의 효율성이 우려된다.
.bashrc
두 가지 방법이 기능적으로 동일하더라도 my 구문 분석 및 프롬프트 명령 구성 방식에 근본적인 차이점이 있습니까? Bash는 함수 객체로 효과적으로 "컴파일"하고 "캐시"할 수 있습니까 prompt_command
? 아니면 문자열을 구문 분석하는 것처럼 각각의 새로운 쉘 라인에 대해 이를 구문 분석합니까?
답변1
.bashrc
새 터미널 세션이 시작될 때마다 파일이 한 번씩 구문 분석됩니다.
구문 분석 중에 함수가 prompt_command
환경 변수에 추가되지만 "컴파일" 단계도 없고 "객체"로 구성되지도 않습니다.Bash는 단일 패스 통역사 언어입니다..
터미널에 새 줄이 입력되면 PROMPT_COMMAND
실행되어 환경 변수에서 이를 효과적으로 검색하고 prompt_command
(쉘에 입력하는 것과 같은 방식 prompt_command
) 한 줄씩 실행됩니다. 따라서 동작은 명령을 에 직접 할당하는 것과 유사합니다 PROMPT_COMMAND
. 직접 할당은 환경 변수를 얻을 필요가 없기 때문에 (무의식적으로) 더 빨라야 합니다.