Как я использую $SECONDS в сценарии удара?

Я хочу сохранить результат $SECONDS команда в переменную, для печати времени в формате HH:MM:SS.

Это - то, что я попробовал до сих пор. Я пытался распечатать его по-разному и всегда получал результат как 0:

time_spent="$SECONDS"
echo "Time: $time_spent"

Я хочу распечатать время, проведенное в оболочке, когда я закрываю свою консоль. Я создал сценарий, который работает каждый раз, когда консоль была закрыта.

5
задан 28 April 2018 в 08:20

4 ответа

Добираться $SECONDS в формат HH:MM:SS необходимо будет сделать некоторую (целочисленную) математику:

hrs=$(( SECONDS/3600 )); mins=$(( (SECONDS-hrs*3600)/60)); secs=$(( SECONDS-hrs*3600-mins*60 ))

printf 'Time spent: %02d:%02d:%02d\n' $hrs $mins $secs
Time spent: 431:48:03
7
ответ дан 23 November 2019 в 08:38

Вы сослались bash внутренняя переменная SECONDS (который производит число секунд, истекших, так как текущий экземпляр оболочки вызывается), и сохранил значение как другую переменную time_spent. Теперь, после того каждого раза Вы проверяете значение переменной time_spent, Вы получили бы то же значение - сохраненное, во время расширения SECONDS.

Динамично добираться SECONDS, необходимо сослаться $SECONDS непосредственно вместо того, чтобы использовать промежуточную переменную:

echo "Time: $SECONDS"

Если Вы настаиваете на том, чтобы использовать промежуточную переменную, удостоверьтесь, что сделали расширение $SECONDS каждый раз.


Относительно значения SECONDS быть 0, можно легко воспроизвести это:

% bash -c 'echo $SECONDS'
0

Точка: при вычислении значения это еще не секунда, таким образом, значение 0, правильно.

6
ответ дан 23 November 2019 в 08:38

Вот быстрый, который дает минуты часов и секунды, с тех пор как оболочка была открыта:

~$ cat how_long_open 
#!/bin/bash

time=$SECONDS
printf '%dh:%dm:%ds\n' $(($time/3600)) $(($time%3600/60)) $(($time%60))

Начиная со скриптов, запущенных в подоболочке, лучший способ, который будет произведен, состоит в том, чтобы получить сценарий вместо того, чтобы назвать его.

Примеры:

Не получая сценарий

~$ ./how_long_open 
0h:0m:0s

С определением источника сценария

~$ source ./how_long_open 
1h:24m:40s

Надеюсь, это поможет!

5
ответ дан 23 November 2019 в 08:38

Если Вы уверены это $SECONDS будет меньше чем 1 день (т.е. 86 400 секунд), затем ядро-utils GNU date делает довольно хорошее задание необходимого форматирования:

$ date -ud "@$SECONDS" "+Time elapsed: %H:%M:%S"
Time elapsed: 00:32:05
$
4
ответ дан 23 November 2019 в 08:38

Другие вопросы по тегам:

Похожие вопросы: