Bash
為什麼我不能在我的 bash 登錄 shell 中更改我的 PS1?
當我 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
.
在我添加這個答案之前,fra-san 在上面的評論中提到了這一點——歸功於他。
可能是某些東西在
${PROMPT_COMMAND}
設置提示。我可以通過以下方式重現您的問題:function set_ps1() { PS1="hi> " } $ PROMPT_COMMAND="set_ps1" hi> PS1="hello " hi>
在這種情況下,當我嘗試將 PS1 設置為 時
"hello"
,它會更改它,執行PROMPT_COMMAND
。該功能PS1
在顯示提示之前變回。