How can the last command's wall time be put in the Bash prompt?

后端 未结 14 2839
無奈伤痛
無奈伤痛 2020-12-04 05:16

Is there a way to embed the last command\'s elapsed wall time in a Bash prompt? I\'m hoping for something that would look like this:

[last: 0s][/my/dir]$ sl         


        
14条回答
  •  清歌不尽
    2020-12-04 06:12

    Here's my take on Thomas'

    uses date +%s%3N to get milliseconds as base unit, simplified following code (less zeros)

    function t_now {
        date +%s%3N
    }
    
    function t_start {
        t_start=${t_start:-$(t_now)}
    }
    
    function t_stop {
        local d_ms=$(($(t_now) - $t_start))
        local d_s=$((d_ms / 1000))
        local ms=$((d_ms % 1000))
        local s=$((d_s % 60))
        local m=$(((d_s / 60) % 60))
        local h=$((d_s / 3600))
        if ((h > 0)); then t_show=${h}h${m}m
        elif ((m > 0)); then t_show=${m}m${s}s
        elif ((s >= 10)); then t_show=${s}.$((ms / 100))s
        elif ((s > 0)); then t_show=${s}.$((ms / 10))s
        else t_show=${ms}ms
        fi
        unset t_start
    }
    set_prompt () {
    t_stop
    }
    
    trap 't_start' DEBUG
    PROMPT_COMMAND='set_prompt' 
    

    Then add $t_show to your PS1

提交回复
热议问题