sh/bash/zsh를 함께 사용할 때 쉘 프롬프트(PS1)의 올바른 배치

sh/bash/zsh를 함께 사용할 때 쉘 프롬프트(PS1)의 올바른 배치

나는 dash(sh), bash 또는 zsh를 사용하고 있습니다. 가능하다면 공용 장소에 두는 것을 선호합니다.

쉘과 상호작용할 때 올바른 PS1 설정을 원하므로 이러한 상황을 고려해야 합니다.

  1. 로그인(PS1 표시)
  2. 스도
  3. 스크립트(PS1은 표시되지 않음)

PS1을 .bashrc에 넣었지만 항상 작동하는 것은 아닙니다.

답변1

각 셸에는 자체 이스케이프 시퀀스가 ​​있으므로 PS1각 셸마다 개별적으로 설정해야 합니다. 게다가 PS1이는 대화형 쉘에만 적합하며 다른 프로그램에서는 사용되지 않습니다. 따라서 PS1쉘의 대화형 시작 파일을 넣으십시오.

  • ~/.bashrc배쉬용
  • ~/.kshrc케쉬의 경우
  • ~/.zshrczsh의 경우

.bashrcBash에는 특이한 점이 있습니다. 로그인 셸에서는 로드 되지 않고 ~/.bash_profilethis만 로드하거나 로드하지 않습니다 ~/.profile. 이 문제를 해결하려면 다음 줄을 에 입력하세요 ~/.bash_profile.

if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) . ~/.bashrc;; esac

셸 설정 파일에 대한 자세한 내용은 다음을 참조하세요.모든 쉘이 읽을 수 있는 ".bashrc"에 해당하는 파일이 있습니까?.

답변2

모든 쉘과 사용자가 동일한 프롬프트를 가지게 하려면 이를 /etc/profile이 파일에 넣으십시오. 모든 쉘의 소스이며 PS1이 정의되는 표준 위치입니다.

답변3

당신이 할 수 있는 한 가지는 일반적으로 명명된 변수를 사용하여 자체 소스 스크립트에서 각 쉘의 해석에 특정한 터미널 이스케이프를 정의한 다음 이를 모두 마지막 프롬프트에 넣는 것입니다.

~/.zshrc

    esc1='SPECIFIC TO ZSH'
    esc2='SPECIFIC TO ZSH'
    . ~/.common_prompt

~/.bashrc

    esc1='SPECIFIC TO BASH'
    esc2='SPECIFIC TO BASH'
    . ~/.common_prompt

~/.dashrc

    esc1='SPECIFIC TO DASH'
    esc2='SPECIFIC TO DASH'
    . ~/.common_prompt

~/.common_prompt

     esc3='COMMONLY INTERPRETED ESCAPE SEQUENCE'
     PROMPT_COMMAND='eval PS1=\"printf %b "$esc1" "$esc2" "$esc3"\"'

하나의 셸이 다른 셸보다 프롬프트에서 더 많은 작업을 수행할 수 있다면 파일을 .dot얻는 것만으로는 .common_prompt반드시 끝나는 것은 아닙니다. 따라서 예를 들어 다음보다 더 많은 처리를 zsh수행하려는 경우 dash,-그럴 것이기 때문에- 거기에서 가져가시면 됩니다.

~/.zshrc

    esc1='SPECIFIC TO ZSH'
    esc2='SPECIFIC TO ZSH'
    . ~/.common_prompt
    _more_processing "${PROMPT_COMMAND}"

관련 정보