我正在尝试显示我的命令的执行日期。因此我在这里使用 PS4 bash 环境变量
PS1="[\u@\h \W]\\$ "
PS4=:\D{%F %T}: ; set -x
是什么给了我以下提示
[user@host temp]$ \ls
:2012-04-10 13:43:52: ls
dir1 dir12 test
[user@host temp]$
另一方面,当我在一个很深的目录中时(也就是说经常说),我希望我的路径不会太长。我找到了以下代码(我不记得在哪里),非常好
bash_prompt_command() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
PS1="[\u@\h \${NEW_PWD}]\\$ "
PROMPT_COMMAND=bash_prompt_command
这给了我以下
[user@host semishort_path]$
当我同时使用 PS4 和 PROMPT_COMMAND 时会出现问题,这给了我可怕的东西:
[user@host temp]$ \ls
:2012-04-10 13:48:32: ls
dir1 dir12 test
::2012-04-10 13:48:32: bash_prompt_command
::2012-04-10 13:48:32: local pwdmaxlen=25
::2012-04-10 13:48:32: local trunc_symbol=..
::2012-04-10 13:48:32: local dir=temp
::2012-04-10 13:48:32: pwdmaxlen=25
::2012-04-10 13:48:32: NEW_PWD='~/temp'
::2012-04-10 13:48:32: local pwdoffset=-19
::2012-04-10 13:48:32: '[' -19 -gt 0 ']'
[user@host temp]$
在 PROMPT_COMMAND 函数中使用的命令由 PS4 显示。
我正在寻找一种方法来避免这种影响:
- 通过在我的提示符(PS1 或 PROMPT_COMMAND)中显示实时时间(在同一提示行上每秒更新一次)
- 寻找另一种减少路径长度的方法(我不在时需要打印最后两个目录〜)
- 也许其他想法?
我知道这是一个棘手的问题,但我认为 BASH 应该能够做我想做的事!