Еще один очень минимальный подход:
trap 'SECONDS=0' DEBUG
export PS1='your_normal_prompt_here ($SECONDS) # '
Показывает количество секунд с момента запуска последней простой команды. Счетчик не сбрасывается, если вы просто нажимаете Enter, не вводя команду - что может быть удобно, когда вы просто хотите увидеть, как долго работал терминал с тех пор, как вы в последний раз что-то в нем делали. Это прекрасно работает для меня в Red Hat и Ubuntu. Это не работает для меня под Cygwin, но я не уверен, является ли это ошибкой или просто ограничением попытки запуска Bash под Windows.
Одним из возможных недостатков этого подхода является то, что вы продолжаете сбрасывать SECONDS, но если вам действительно нужно сохранить SECONDS в качестве количества секунд с момента первоначального вызова оболочки, вы можете создать собственную переменную для счетчика 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:». Отрегулируйте по вкусу.