이 원격 시스템에 ssh로 접속하면 을(를) 수정할 수 없습니다 PS1
. 그러나 ssh를 통해 로그인할 때 로그인하지 않은 Bash를 시작하면 을(를) 수정할 수 있습니다 PS1
.
dev ~ ❯ bash --login
dev ~ ❯ echo $PS1
dev \W ❯
dev ~ ❯ PS1="foobar: "
dev ~ ❯ echo $PS1
dev \W ❯
dev ~ ❯ bash
dev ~ ❯ PS1="foobar: "
foobar: echo $PS1
foobar:
foobar:
다음은 동일한 출력이지만 , echo
및 의 시작과 끝에 명령문이 있습니다.~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
dev ~ ❯ bash --login
bash_profile
bash_login
profile
bashrc
bashrc end
profile end
bash_login end
bash_profile end
dev ~ ❯ echo $PS1
dev \W ❯
dev ~ ❯ PS1="foobar: "
dev ~ ❯ echo $PS1
dev \W ❯
dev ~ ❯ bash
bashrc
bashrc end
dev ~ ❯ PS1="foobar: "
foobar: echo $PS1
foobar:
foobar:
시스템에서 기본값은 다음 PS1
과 같이 설정되어 있는 것으로 보입니다 /etc/bash.bashrc
.
PS1='${ENV:-${ENVIRONMENT:-$(basename HOSTNAME)}} \W ❯ '
파일의 출처는 /etc/profile
.
# If PS1 is not set, load bashrc || zshenv or set the prompt
# shellcheck disable=SC1091
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "${BASH}" != '/bin/sh' ]; then
[ -f /etc/bash.bashrc ] && . /etc/bash.bashrc
# elif [ "${ZSH-}" ] && [ "${ZSH}" != '/bin/sh' ]; then
# [ -f /etc/zshenv ] && . /etc/zshenv
else
# lightning symbol \342\232\241
"${IS_ROOT}" && PS1='\[\342\232\241\] ' || PS1='❯ '
fi
fi
참고: 결국 PS1
에는 ~/.bashrc
.
답변1
이 답변을 추가하기 전에 fra-san은 위의 의견에서 이것을 언급했습니다. 신용은 그에게 있습니다.
${PROMPT_COMMAND}
뭔가가 프롬프트를 설정하고 있을 수도 있습니다 . 다음 방법으로 문제를 재현할 수 있습니다.
function set_ps1() {
PS1="hi> "
}
$ PROMPT_COMMAND="set_ps1"
hi> PS1="hello "
hi>
이 경우 PS1을 설정하려고 하면 "hello"
변경되어 작동합니다 PROMPT_COMMAND
. PS1
프롬프트가 표시되기 전에 기능이 다시 변경됩니다.
답변2
나는 다음을 추가했다 /home/[username]/.bashrc
:
unset PROMPT_COMMAND
PS1="[\h:\w] "
이렇게 하면 PROMPT_COMMAND
변수가 설정 해제된 다음 변수를 설정할 수 있습니다 PS1
.