gpt4 book ai didi

bash - 设置 PROMPT_COMMAND 和 PS4(在命令启动时有日期和棘手的打印路径)

转载 作者:行者123 更新时间:2023-11-29 09:28:50 25 4
gpt4 key购买 nike

我正在尝试显示命令的执行日期。因此我使用 PS4 bash 环境变量给出 here

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 应该能够做我想做的事!

最佳答案

最简单的方法,就是在每个命令前执行一段代码

function tsprint() {
if [[ $BASH_COMMAND != bash_prompt_command ]]
then
echo $(date) ": $BASH_COMMAND"
fi
}
PS1="[\u@\h \${NEW_PWD}]\\$ "
PROMPT_COMMAND="bash_prompt_command;trap 'tsprint; trap DEBUG' DEBUG"

这里是示例输出:

[shaman@shamanbook ~]$ cd Music/
Fri Apr 13 02:22:34 EEST 2012 : cd Music/
[shaman@shamanbook ~]$ ls
Fri Apr 13 02:22:34 EEST 2012 : ls --color=auto
[shaman@shamanbook ~/Music]$
[shaman@shamanbook ~/Music]$ pwd
Fri Apr 13 02:22:39 EEST 2012 : pwd
/home/shaman/Music
[shaman@shamanbook ~/Music]$
[shaman@shamanbook ~/Music]$

关于bash - 设置 PROMPT_COMMAND 和 PS4(在命令启动时有日期和棘手的打印路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com