Bash

為什麼我不能在我的 bash 登錄 shell 中更改我的 PS1?

  • September 2, 2020

當我 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在顯示提示之前變回。

引用自:https://unix.stackexchange.com/questions/607250