Как эффективно выполнить время выполнения скрипта?

Я хотел бы показать время завершения скрипта.

То, что я сейчас делаю,

#!/bin/bash date ## echo the date at start # the script contents date ## echo the date at end 

Это просто показывает время начала и конца скрипта. Можно ли отображать мелкозернистый выход, такой как время процессора / время и т. Д.?

  • Linux mutex spins
  • Профилирование памяти, диска, процессора и времени из python
  • Какой процесс написал адрес памяти?
  • Печать макета памяти ядра
  • Использование процессора в соответствии с ps и operf
  • Измерение промахов последнего уровня через PAPI на машине AMD, работающей под управлением Ubuntu Linux
  • Попытка декодирования mp3-файла на графическом процессоре NVIDIA Tesla K20c на RHEL 6.6
  • Как я могу определить, является ли мой GPU узким местом?
  • 11 Solutions collect form web for “Как эффективно выполнить время выполнения скрипта?”

    Просто используйте time когда вы вызываете скрипт:

     time yourscript.sh 

    Если time не является вариантом,

     start=`date +%s` stuff end=`date +%s` runtime=$((end-start)) 

    Просто вызывать times без аргументов при выходе из сценария.

    С помощью ksh или zsh вы также можете использовать time . С помощью zsh time также даст вам время настенных часов в дополнение к времени процессора и пользователя .

    Чтобы сохранить статус выхода вашего скрипта, вы можете сделать это:

     ret=$?; times; exit "$ret" 

    Или вы также можете добавить ловушку на EXIT :

     trap times EXIT 

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

     $ bash -c 'trap times EXIT; : {1..1000000}' 0m0.932s 0m0.028s 0m0.000s 0m0.000s $ zsh -c 'trap time EXIT; : {1..1000000}' shell 0.67s user 0.01s system 100% cpu 0.677 total children 0.00s user 0.00s system 0% cpu 0.677 total 

    Также обратите внимание, что все bash , ksh и zsh имеют специальную переменную $SECONDS которая подсчитывает количество секунд с момента запуска оболочки. Как в zsh и в ksh93 эта переменная также может быть сделана с плавающей точкой (с typeset -F SECONDS ) для получения большей точности. Это только время настенных часов, а не время процессора.

    Я немного опоздал к победителю, но хотел опубликовать свое решение (для точности в секунду), если другие случайно наткнулись на эту нить через поиск. Выходной сигнал находится в формате дней, часов, минут и, наконец, секунд:

     res1=$(date +%s.%N) # do stuff in here res2=$(date +%s.%N) dt=$(echo "$res2 - $res1" | bc) dd=$(echo "$dt/86400" | bc) dt2=$(echo "$dt-86400*$dd" | bc) dh=$(echo "$dt2/3600" | bc) dt3=$(echo "$dt2-3600*$dh" | bc) dm=$(echo "$dt3/60" | bc) ds=$(echo "$dt3-60*$dm" | bc) printf "Total runtime: %d:%02d:%02d:%02.4f\n" $dd $dh $dm $ds 

    Надеюсь, кто-то там найдет это полезным!

    Мой метод для bash :

     # Reset BASH time counter SECONDS=0 # # do stuff # ELAPSED="Elapsed: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" 
     #!/bin/bash start=$(date +%s.%N) # HERE BE CODE end=$(date +%s.%N) runtime=$(python -c "print(${end} - ${start})") echo "Runtime was $runtime" 

    Да, это называет Python, но если вы можете жить с этим, то это довольно приятное, краткое решение.

    Вот вариант ответа Алекса. Мне всего лишь минут и секунд, но я также хотел, чтобы он отформатировался по-другому. Поэтому я сделал это:

     start=$(date +%s) end=$(date +%s) runtime=$(python -c "print '%u:%02u' % ((${end} - ${start})/60, (${end} - ${start})%60)") 
     #!/bin/csh #PBS -q glean #PBS -l nodes=1:ppn=1 #PBS -l walltime=10:00:00 #PBS -o a.log #PBS -e a.err #PBS -V #PBS -M shihcheng.guo@gmail.com #PBS -m abe #PBS -A k4zhang-group START=$(date +%s) for i in {1..1000000} do echo 1 done END=$(date +%s) DIFF=$(echo "$END - $START" | bc) echo "It takes DIFF=$DIFF seconds to complete this task..." 
     #!/bin/bash begin=$(date +"%s") Script termin=$(date +"%s") difftimelps=$(($termin-$begin)) echo "$(($difftimelps / 60)) minutes and $(($difftimelps % 60)) seconds elapsed for Script Execution." 

    Небольшая функция оболочки, которая может быть добавлена ​​перед командами для измерения их времени:

     tm() { s=$(date +%s) $@ rc=$? echo "took $[$(date +%s)-$s] seconds" >&2 return $rc } 

    Затем используйте его в своем скрипте или в командной строке:

     tm the_original_command with all its parameters 

    Используя только bash, можно также измерить и вычислить продолжительность времени для части сценария оболочки (или прошедшего времени для всего скрипта):

     start=$SECONDS ... # do time consuming stuff end=$SECONDS 

    вы можете либо просто распечатать разницу:

     echo "duration: $((end-start)) seconds." 

    если вам нужна только инкрементная продолжительность:

     echo "duration: $((SECONDS-start)) seconds elapsed.." 

    Вы также можете сохранить продолжительность в переменной:

     let diff=end-start 
    Interesting Posts

    polkit-gnome-authentication-agent-1 не запускается автоматически после обновления

    SHIBBOLETH SP – обработчик Shibboleth, вызванный в неустановленном месте – Shibboleth.sso / Session /

    почему ifup wlan0 также настраивает wlan1?

    Как определить, какая клавиатура использовалась для нажатия клавиши?

    Какой пользователь должен запускать apache и PHP? Какие разрешения должны иметь / var / www файлы?

    сканировать каталоги файлов .pdf и .ps для ключевого слова в заголовке и авторе

    Как форматировать вывод из nmap в определенном предопределенном формате

    Что является самым безопасным и простым способом ввода пароля пользователя в bash стать частью stdin для программы?

    Как проверить, взаимодействуют ли два локальных процесса через сокеты или ipcs?

    Clonezilla / Cloning :: ОЧЕНЬ основные вопросы

    Экран создания / возобновления сеанса, команда запуска

    Как ограничить доступ к локальной файловой системе пользователя? Каков наилучший метод?

    Сценарий Bash для удаления файла с именем index.html рекурсивно

    Linux Mint 18 удаляет /etc/init.d/xorg.conf при каждой перезагрузке и не запускает x-сервер

    LXC: проверены ли загруженные шаблоны?

    Linux и Unix - лучшая ОС в мире.