Сохраните в переменной количество секунд, затраченных процессом - PullRequest
6 голосов
/ 13 мая 2009

Я хочу запустить процесс в bash и сохранить в переменной env количество секунд, которое потребовалось для запуска. Как бы я поступил так?

Ответы [ 4 ]

16 голосов
/ 13 мая 2009

Вы хотите добавить этот код в свой скрипт или сделать это из процесса, запускающего скрипт?

Для последнего вы можете использовать зарезервированное слово "time", а затем проанализировать, что оно возвращает, чтобы узнать, сколько времени занимает скрипт.

Если вы хотите сделать это из скрипта, вы можете установить переменную SECONDS равной нулю, и каждый раз после того, как вы ссылаетесь на эту переменную, она будет обновляться до количества прошедших секунд. Таким образом, вы можете поместить «SECONDS = 0» в самом начале вашего скрипта, и всякий раз, когда вам понадобится истекшее время, оно будет в переменной SECONDS.

Вы также можете использовать трюк $ SECONDS в командной строке, например:

$ SECONDS=0; sleep 5 ; echo "that took approximately $SECONDS seconds"

Слово с зарезервированным временем и переменная SECONDS задокументированы на справочной странице bash.

7 голосов
/ 13 мая 2009

Это работает в Bash, а также Zsh:

# Set time format to seconds
TIMEFORMAT=%R
# Time a process
PROC_TIME=$(time (insert command here >/dev/null 2>&1) 2>&1)
echo $PROC_TIME
  • Первые два перенаправления скрывают вывод вашего процесса "> / dev / null 2> & 1"
  • Последнее перенаправление необходимо, потому что «время» печатает время на stderr
1 голос
/ 13 мая 2009

Использование Время GNU ,

\time -p -o time.log $COMMAND

, а затем читать time.log.

(используйте \time или command time, в противном случае вы будете использовать встроенный в Bash time, который не поддерживает эти параметры.)

Это будет работать даже тогда, когда $COMMAND печатает на stderr (что может запутать ответ Оли), и сохраняет stdout / stderr (на что не отвечает Фарзи).

-o ... говорит time отправлять свои выходные данные в файл, а не в stderr (как по умолчанию), а -p генерирует традиционный

real 0.00
user 0.00
sys 0.00

вместо значения по умолчанию времени GNU

0.00user 0.00system 0:00.01elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k
80inputs+0outputs (1major+188minor)pagefaults 0swaps
0 голосов
/ 13 мая 2009

Используйте команду времени. Обратите внимание, что bash-версия time не совпадает с / usr / bin / time. Так что у вас будет что-то вроде:

TIME=`/usr/bin/time --format="%e" your_command_here >/dev/null`

Формат просто выводит значение «реального» времени. Вам нужно будет преобразовать это из строки, если вы хотите сделать что-то большее, чем отобразить его.

Если вы просто хотите экспортировать строку, используйте export.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...