如何让 PS1 提示显示时间、用户、主机、目录和 Git 分支

Mic*_*ant 4 bash prompt

我见过其他人将所有这些信息添加到他们的 PS1 提示中。

我喜欢对元素进行着色并在最后进行回车的方法。

dar*_*nir 5

我在我的机器上使用了相当复杂的 PS1 线。以下代码集创建我的 PS1 线。如果您想使用它,请将其放入您的 bashrc 文件中。我不确定它是否适用于 OSX 系统,但我的猜测是不行。

source "/usr/share/git/completion/git-prompt.sh"

GIT_PS1_SHOWDIRTYSTATE=1;
GIT_PS1_SHOWCOLORHINTS=1;
GIT_PS1_SHOWUNTRACKEDFILES=1;

SH_WHITE="\[\033[1;37m\]"
SH_BLUE="\[\033[1;34m\]"
SH_RED="\[\033[1;31m\]"
SH_GREEN="\[\033[1;32m\]"
SH_YELLOW="\[\033[1;33m\]"

BL_ANGLE="\342\224\224"
TL_ANGLE="\342\224\214"
HORIZ_LINE="\342\224\200"

BATT="\$(acpi -b | awk '{print \$4}' | cut -b1-3)"
FILES_STAT="\$(ls -1 | wc -l | sed 's: ::g')"
FILES_SIZE="\$(ls -lah | grep -m 1 total | sed 's/1:total //')b"
GIT_PS1='$(__git_ps1 "(%s)")'

if [ $UID -eq 0 ]; then
PS1='\[\e[0;31m\]\u\[\e[m\]\[\e[1;37m\]@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;32m\]'
elif [ -n "$SSH_CLIENT" ]; then
    PS1='\[\e[0;31m\](SSH)\[\e[m\]\[\e[1;37m\]\u@\h\[\e[m\] \[\e[1;34m\]\W\[\e[m\] \[\e[1;32m\]$(acpi -b | awk "{print \$4}" | cut -b1-3) $(__git_ps1 "(%s) ")\$\[\e[m\] \[\e[1;32m\]'
else
PS1="\n"${SH_WHITE}${TL_ANGLE}"("${SH_BLUE}"\u"${SH_WHITE}"@"${SH_RED}"\h"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\$?"${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}${BATT}${SH_WHITE}")"${HORIZ_LINE}"("${SH_GREEN}"\@ \d"${SH_WHITE}")\n"${BL_ANGLE}${HORIZ_LINE}"("${SH_GREEN}"\w"${SH_WHITE}")"${HORIZ_LINE}"("${SH_YELLOW}${FILES_STAT}" files, "${FILES_SIZE}${SH_WHITE}")"${HORIZ_LINE}${SH_BLUE}${GIT_PS1}${SH_WHITE}"> "${SH_GREEN}
fi
trap 'echo -ne "\e[0m"' DEBUG
Run Code Online (Sandbox Code Playgroud)

我目前正在工作,本机上没有设置上述 PS1 线路。我回来后会用屏幕截图更新这个答案。但在那之前让我尝试解释一下它的作用:

  1. 我们获取 git 的补全脚本。他们在同一位置有一个类似的 zsh 。__git_ps1这为我们提供了在 PS1 系列中使用的重要功能。如果您不在 git 存储库中,此脚本不会输出任何内容。
  2. 设置一些变量来定义 PS1 行上显示有关 git 分支的信息类型。
  3. 我设置了一些变量,以便轻松管理我拥有的庞大 PS1 系列。我在控制台上画了那些转义字符。这些SH_*变量是颜色的缩写。它们是 ANSI 序列,将导致终端显示彩色输出。最后,我们设置一些执行某些操作的变量,例如获取电池状态和当前目录中的文件数量。
  4. 这里我们定义实际的 PS1 线。由于我在全局范围内使用此设置,因此我首先检查当前用户是否为 root 用户。对于 root,我有一个非常简单的 PS1 行,它将用户名显示为红色。如果您通过 SSH 连接,则不需要如此复杂的线路,因此,我们再次显示一些更简单的内容。否则,显示完整的 PS1 行。理解这条线可能需要一段时间。这是一个 2 行 PS1,可以显示大量信息。
  5. 最后一行trap ...是必需的,这样颜色设置就不会渗透到所有输出中。最后一个${SH_GREEN}导致我的输入变成绿色。但是,我不希望所有程序的所有输出也都被染成绿色。因此,trap声明。

https://qph.is.quoracdn.net/main-qimg-6865c151ef3b12f0cdafdd1313d415e8?convert_to_webp=true