将 bash 命令添加到 PS1

Adding a bash command to PS1

我想在命令提示符中添加一个 bash 命令。让我们说 date -R,打印当前时间。 我将如何着手执行此操作,同时还要确保它不只是坚持将命令添加到 PS1 时出现的任何时间? (因此,当在命令行上按回车键时,提示符也会更新为命令的新值)

您可以在 PS1 出现之前使用 PROMPT_COMMAND 环境变量来 运行 命令。例如:

export PROMPT_COMMAND="date -R"

~/.bashrc 中,提示可能类似于:

Wed, 17 Jun 2020 18:15:01 -0400
user@computer:~$

最短的方法是包含一个命令替换,但进行了转义,以便在 PS1 显示 之前不会对其进行评估

# PS1="$(date -R) > "  would include the same date in every prompt
PS1='$(date -R) > "

我更喜欢使用 PROMPT_COMMAND 变量,它允许您在显示每个提示之前为 运行 指定代码。这使您可以将更复杂的提示分解为函数内更容易遵循的步骤。

PROMPT_COMMAND='make_prompt'
make_prompt () {
   # Just to demonstrate building up PS1 piece by piece
   PS1="$(date -R)"
   PS1+=" > "
}

不过,对于这个具体示例,您不需要命令替换。有用于显示日期的预先存在的提示转义:

# duplicating the format of date -R (RFC 2822)
PS1='\D{%a, %d %b %Y %H:%M:%S %z} > '

\D{...} 中,您可以使用 strftime 可以处理的任何字符串。