一起使用 sh/bash/zsh 时 shell 提示符(PS1)的正确放置位置

一起使用 sh/bash/zsh 时 shell 提示符(PS1)的正确放置位置

我正在使用 dash(sh) 或 bash 或 zsh。如果可以的话,我更愿意放在共同的地方。

我想在与 shell 交互时进行正确的 PS1 设置,因此应考虑这些情况

  1. 登录(显示 PS1)
  2. 须藤
  3. 脚本(不显示 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}"

相关内容