Я пишу сценарий на bash для расчета времени, прошедшего для выполнения моих команд, примите во внимание:
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
Думаю, моя логика верна, но я получаю следующую распечатку:
«На выполнение этой задачи уходит несколько секунд ...»
Что-то не так с моей оценкой строки?
Я считаю, что переменные bash нетипизированы, я бы хотел, чтобы в bash был метод «строка в целое число».
Я считаю очень удобным использовать внутреннюю переменную "$ SECONDS"
SECONDS=0 ; sleep 10 ; echo $SECONDS
источник
$SECONDS
действительно работает для / bin / bash. Это не работает для / bin / dash, оболочки по умолчанию в Debian и Ubuntu.sleep 0.5
выше, результат иногда равен 0, иногда 1 (по крайней мере, в Bash 5.0.3).Вы пытаетесь выполнить номер в
ENDTIME
качестве команды. Вы также должны увидеть ошибку вроде1370306857: command not found
. Вместо этого используйте арифметическое расширение :Вы также можете сохранить команды в отдельном скрипте
commands.sh
и использовать команду time:источник
Здесь вы можете использовать
time
ключевое слово Bash с соответствующей строкой форматаВот о чем говорится
TIMEFORMAT
в ссылке :источник
Для больших чисел мы можем захотеть распечатать в более читаемом формате. Пример ниже делает то же, что и другие, но также печатает в "человеческом" формате:
Простое тестирование:
Вывод:
Чтобы использовать в сценарии, как описано в других сообщениях (начальная точка захвата, затем вызовите функцию со временем окончания:
источник
Попробуйте следующий код:
источник
Это однострочная альтернатива функции Майка Q:
источник
SECONDS
от Лона Kaut в ответ и держать голову , что $ / $ {} ненужно на арифметических переменных делает код настолько коротким , что даже может быть использован встроенный:echo "$((SECONDS/3600))h $(((SECONDS/60)%60))m $((SECONDS%60))s"
попробуйте использовать время с опцией прошедших секунд:
/usr/bin/time -f%e sleep 1
под баш.или
\time -f%e sleep 1
в интерактивном bash.см. страницу руководства по времени:
и
источник
/bin/time
здесь не сработает: OP упоминает блок . Так чтоtime
здесь нам действительно нужно ключевое слово .источник
источник