diff --git a/themes/command_duration.theme.bash b/themes/command_duration.theme.bash index cf91785c..c7fb6655 100644 --- a/themes/command_duration.theme.bash +++ b/themes/command_duration.theme.bash @@ -1,40 +1,34 @@ # shellcheck shell=bash -if [ -z "$BASH_IT_COMMAND_DURATION" ] || [ "$BASH_IT_COMMAND_DURATION" != true ]; then +if [[ "${BASH_IT_COMMAND_DURATION:-false}" != true ]]; then _command_duration() { echo -n } return fi -# Define tmp dir and file -COMMAND_DURATION_TMPDIR="${TMPDIR:-/tmp}" -COMMAND_DURATION_FILE="${COMMAND_DURATION_FILE:-$COMMAND_DURATION_TMPDIR/bashit_theme_execution_$BASHPID}" +COMMAND_DURATION_START_TIME= COMMAND_DURATION_ICON=${COMMAND_DURATION_ICON:-'  '} COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-'1'} -trap _command_duration_delete_temp_file EXIT HUP INT TERM - -_command_duration_delete_temp_file() { - if [[ -f "$COMMAND_DURATION_FILE" ]]; then - rm -f "$COMMAND_DURATION_FILE" - fi -} - _command_duration_pre_exec() { - date +%s.%1N > "$COMMAND_DURATION_FILE" + local command_nano_now="$(date +%1N)" + [[ "$command_nano_now" == "1N" ]] && command_nano_now=1 + COMMAND_DURATION_START_TIME="$(date "+%s").${command_nano_now}" } _command_duration() { local command_duration command_start current_time local minutes seconds deciseconds local command_start_sseconds current_time_seconds command_start_deciseconds current_time_deciseconds - current_time=$(date +%s.%1N) + local command_nano_now="$(date +%1N)" + [[ "$command_nano_now" == "1N" ]] && command_nano_now=1 + current_time="$(date "+%s").${command_nano_now}" - if [[ -f "$COMMAND_DURATION_FILE" ]]; then - command_start=$(< "$COMMAND_DURATION_FILE") - command_start_sseconds=${command_start%.*} + if [[ -n "${COMMAND_DURATION_START_TIME:-}" ]]; then + _bash_it_log_section="command_duration" _log_debug "calculating start time" + command_start_sseconds=${COMMAND_DURATION_START_TIME%.*} current_time_seconds=${current_time%.*} command_start_deciseconds=$((10#${command_start#*.})) @@ -42,6 +36,7 @@ _command_duration() { # seconds command_duration=$((current_time_seconds - command_start_sseconds)) + _bash_it_log_section="command_duration" _log_debug "duration: $command_duration (from $COMMAND_DURATION_START_TIME to $current_time)" if ((current_time_deciseconds >= command_start_deciseconds)); then deciseconds=$(((current_time_deciseconds - command_start_deciseconds))) @@ -49,12 +44,12 @@ _command_duration() { ((command_duration -= 1)) deciseconds=$((10 - ((command_start_deciseconds - current_time_deciseconds)))) fi - command rm "$COMMAND_DURATION_FILE" else command_duration=0 fi if ((command_duration > 0)); then + _bash_it_log_section="command_duration" _log_debug "calculating minutes and seconds" minutes=$((command_duration / 60)) seconds=$((command_duration % 60)) fi