Bash: PS1과 프롬프트 및 제목을 설정하는 프롬프트 명령 비교

Bash: PS1과 프롬프트 및 제목을 설정하는 프롬프트 명령 비교

프롬프트 설정과 터미널 제목 설정에 대한 성능/효율성 측면에서 다음 옵션 사이에 많은 차이가 있나요? (에 대한 추가 호출과는 별도로 echo)

  1. PS1을 명령의 출력으로 설정합니다.
PS1="\$(my_fun)"
my_fun() {
  echo "my prompt"
}
  1. PS1을 직접 설정하는 데 사용 PROMPT_COMMAND:
PROMPT_COMMAND=_prompt_command
_prompt_command() {
    PS1="my prompt"
}

답변1

능률:

  • PS1="$(fun)"함수를 호출합니다딱 한번(할당이 구문 분석될 때) 서브쉘 프로세스를 사용합니다. 출력이 완전히 정적인 경우 가장 효율적인 옵션입니다.
  • PROMPT_COMMAND=fun함수를 호출합니다매번(프롬프트가 표시될 때마다) 기본 쉘 프로세스 내에서 실행됩니다.
  • PS1="\$(fun)"함수를 호출합니다매번(프롬프트가 표시될 때마다) 매번 하위 쉘 프로세스를 생성하므로 PROMPT_COMMAND보다 효율성이 떨어집니다(그러나 때로는 필요합니다. 다음 섹션을 참조하십시오.)

단정:

  • 의 내용은 PS1Readline에 제공되어 프롬프트 너비를 파악하고 더 이상 한 줄에 맞지 않는 경우 입력을 올바르게 래핑할 수 있습니다. PS1에서 함수(예: )를 호출할 때 일반적인 및 대신 및 로 PS1="\$(foo)"보이지 않는 시퀀스를 래핑해야 합니다 .\001\002\[\]
  • 결과는 PROMPT_COMMAND화면에 직접 표시되며 Readline에는 알려지지 않습니다. 이 방법을 독점적으로(즉, 빈 과 함께) 사용하려고 하면 PS1=""입력이 한 줄보다 길어지면 커서가 더 이상 의미가 없으며 더 이상 두 번째 줄에서 백스페이스할 수 없다는 것을 알 수 있습니다. 1호선으로.
  • 여러 줄로 구성된 쉘 프롬프트의 경우 이전 줄이 어떻게 표시되는지는 중요하지 않습니다.마지막라인은 여전히 ​​를 통해 표시됩니다 PS1.
  • 또한 터미널 제목을 설정하는 데 무엇을 사용하는지는 중요하지 않습니다. 어쨌든 프롬프트 너비에 계산되지 않기 때문입니다.

관련 정보