나는 dash(sh), bash 또는 zsh를 사용하고 있습니다. 가능하다면 공용 장소에 두는 것을 선호합니다.
쉘과 상호작용할 때 올바른 PS1 설정을 원하므로 이러한 상황을 고려해야 합니다.
- 로그인(PS1 표시)
- 수
- 스도
- 스크립트(PS1은 표시되지 않음)
PS1을 .bashrc에 넣었지만 항상 작동하는 것은 아닙니다.
답변1
각 셸에는 자체 이스케이프 시퀀스가 있으므로 PS1
각 셸마다 개별적으로 설정해야 합니다. 게다가 PS1
이는 대화형 쉘에만 적합하며 다른 프로그램에서는 사용되지 않습니다. 따라서 PS1
쉘의 대화형 시작 파일을 넣으십시오.
~/.bashrc
배쉬용~/.kshrc
케쉬의 경우~/.zshrc
zsh의 경우
.bashrc
Bash에는 특이한 점이 있습니다. 로그인 셸에서는 로드 되지 않고 ~/.bash_profile
this만 로드하거나 로드하지 않습니다 ~/.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}"