프롬프트 설정과 터미널 제목 설정에 대한 성능/효율성 측면에서 다음 옵션 사이에 많은 차이가 있나요? (에 대한 추가 호출과는 별도로 echo
)
- PS1을 명령의 출력으로 설정합니다.
PS1="\$(my_fun)"
my_fun() {
echo "my prompt"
}
- PS1을 직접 설정하는 데 사용
PROMPT_COMMAND
:
PROMPT_COMMAND=_prompt_command
_prompt_command() {
PS1="my prompt"
}
답변1
능률:
PS1="$(fun)"
함수를 호출합니다딱 한번(할당이 구문 분석될 때) 서브쉘 프로세스를 사용합니다. 출력이 완전히 정적인 경우 가장 효율적인 옵션입니다.PROMPT_COMMAND=fun
함수를 호출합니다매번(프롬프트가 표시될 때마다) 기본 쉘 프로세스 내에서 실행됩니다.PS1="\$(fun)"
함수를 호출합니다매번(프롬프트가 표시될 때마다) 매번 하위 쉘 프로세스를 생성하므로 PROMPT_COMMAND보다 효율성이 떨어집니다(그러나 때로는 필요합니다. 다음 섹션을 참조하십시오.)
단정:
- 의 내용은
PS1
Readline에 제공되어 프롬프트 너비를 파악하고 더 이상 한 줄에 맞지 않는 경우 입력을 올바르게 래핑할 수 있습니다. PS1에서 함수(예: )를 호출할 때 일반적인 및 대신 및 로PS1="\$(foo)"
보이지 않는 시퀀스를 래핑해야 합니다 .\001
\002
\[
\]
- 결과는
PROMPT_COMMAND
화면에 직접 표시되며 Readline에는 알려지지 않습니다. 이 방법을 독점적으로(즉, 빈 과 함께) 사용하려고 하면PS1=""
입력이 한 줄보다 길어지면 커서가 더 이상 의미가 없으며 더 이상 두 번째 줄에서 백스페이스할 수 없다는 것을 알 수 있습니다. 1호선으로. - 여러 줄로 구성된 쉘 프롬프트의 경우 이전 줄이 어떻게 표시되는지는 중요하지 않습니다.마지막라인은 여전히 를 통해 표시됩니다
PS1
. - 또한 터미널 제목을 설정하는 데 무엇을 사용하는지는 중요하지 않습니다. 어쨌든 프롬프트 너비에 계산되지 않기 때문입니다.