我正在使用 dash(sh) 或 bash 或 zsh。如果可以的话,我更愿意放在共同的地方。
我想在与 shell 交互时进行正确的 PS1 设置,因此应考虑这些情况
- 登录(显示 PS1)
- 苏
- 须藤
- 脚本(不显示 PS1)
我将 PS1 放在 .bashrc 上,但似乎并不总是可行。
答案1
每个 shell 都有自己的转义序列PS1
,因此您需要为每个 shell 单独设置。此外,PS1
仅对交互式 shell 有意义,其他程序不使用它。因此,请PS1
放入 shell 的交互式启动文件:
~/.bashrc
对于bash~/.kshrc
对于克什~/.zshrc
对于 zsh
Bash 有一个怪癖:它不会.bashrc
在登录 shell 中加载,它只加载~/.bash_profile
或不加载 this ~/.profile
。要解决此问题,请将以下行放入您的~/.bash_profile
:
if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) . ~/.bashrc;; esac
有关 shell 设置文件的更多信息,请参阅是否有一个所有 shell 都能读取的“.bashrc”等效文件?。
答案2
如果您希望所有 shell 和用户都有相同的提示,请将其放入该/etc/profile
文件中。它是所有 shell 的来源,是定义 PS1 的标准位置。
答案3
您可以做的一件事是使用通常命名的变量来定义特定于每个 shell 在其自己的源脚本中的解释的终端转义,然后将其全部放在最后一个提示符中:
~/.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"\"'
如果一个 shell 可能比另一个 shell 在提示符下做更多的事情,那么仅仅.dot
获取.common_prompt
文件并不一定是结束。因此,如果zsh
要进行dash,
比例如更多的处理 -因为它会- 你只需从那里拿走它:
~/.zshrc
esc1='SPECIFIC TO ZSH'
esc2='SPECIFIC TO ZSH'
. ~/.common_prompt
_more_processing "${PROMPT_COMMAND}"