Поскольку вы используете bash
, вы можете перехватить
сигнал DEBUG , чтобы пересчитать SESSIONLENGTH
перед каждой командой:
trap 'source /path/to/sessionlength' DEBUG
Исходный сценарий sessionlength
должен быть только содержимым вашего цикла, без while
и sleep
части вокруг него:
SECONDSINSESSION=$SECONDS
SECONDSINMINUTE=60
SECONDSINHOUR=3600
SECONDSINDAY=86400
DAYSINSESSION=$(expr "$SECONDSINSESSION" / "$SECONDSINDAY")
DAY_REMAINDER=$(expr "$SECONDSINSESSION" % "$SECONDSINDAY")
HOURSINSESSION=$(expr "$DAY_REMAINDER" / "$SECONDSINHOUR")
HOUR_REMAINDER=$(expr "$DAY_REMAINDER" % "$SECONDSINHOUR")
MINUTESINSESSION=$(expr "$HOUR_REMAINDER" / "$SECONDSINMINUTE")
SECONDSINSESSION=$(expr "$HOUR_REMAINDER" % "$SECONDSINMINUTE")
SESSIONLENGTH="$DAYSINSESSION days, $HOURSINSESSION hours, $MINUTESINSESSION minutes, and $SECONDSINSESSION seconds."
bash
также предоставляет арифметическое расширение , так что вы можете избежать создания 6 expr
процессов каждый раз, используя
DAYSINSESSION=$((SECONDSINSESSION/SECONDSINDAY))
и т. д.