另一个非常简单的方法是:
trap 'SECONDS=0' DEBUG
export PS1='your_normal_prompt_here ($SECONDS) # '
这显示了自上一个简单命令启动以来的秒数。如果您在不输入命令的情况下直接按 Enter 键,则计数器不会重置 - 当您只想查看自上次在其中执行任何操作后终端已经启动了多长时间时,这可能会很方便。它在 Red Hat 和 Ubuntu 中对我来说很好用。在 Cygwin 下它对我不起作用,但我不确定这是一个错误还是只是尝试在 Windows 下运行 Bash 的限制。
这种方法的一个可能缺点是您不断重置 SECONDS,但如果您确实需要将 SECONDS 保留为自初始 shell 调用以来的秒数,您可以为 PS1 计数器创建自己的变量,而不是直接使用 SECONDS。另一个可能的缺点是像“999999”这样的大秒值可能会更好地显示为天+小时+分钟+秒,但是添加一个简单的过滤器很容易,例如:
seconds2days() { # convert integer seconds to Ddays,HH:MM:SS
printf "%ddays,%02d:%02d:%02d" $(((($1/60)/60)/24)) \
$(((($1/60)/60)%24)) $((($1/60)%60)) $(($1%60)) |
sed 's/^1days/1day/;s/^0days,\(00:\)*//;s/^0//' ; }
trap 'SECONDS=0' DEBUG
PS1='other_prompt_stuff_here ($(seconds2days $SECONDS)) # '
这会将“999999”翻译成“11days,13:46:39”。最后的 sed 将“1days”更改为“1day”,并修剪掉诸如“0days,00:”之类的空前导值。调整口味。