Как получить время выполнения Bash в миллисекундах в Mac OS X?
Я проверил это , но предоставленное решение не сработало для меня.
Используя дату, я могу получить время выполнения в секундах:
T="$(date +%s)" #some work here T="$(($(date +%s)-T))" echo "execution time (secs) ${T}"
Однако, когда я пробую это:
- Регулярное выражение для слова «или» нескольких слов в grep
- Почему удаление SFTP происходит так долго?
- Могу ли я контролировать локальный домен домена unix, например, tcpdump?
- Что означают скобки и число после команды Unix или функции C?
- Почему Windows использует обратную косую черту для путей и косые черты Unix?
T="$(date +%s%N)" #some work here T="$(($(date +%s%N)-T))"
Добавляя% N (как указано выше) к дате получения nano-second precision, я получаю следующую ошибку: –bash: 1369320760N: слишком большое значение для базы (токен ошибки – «1369320760N»)
Кто-нибудь знает, как измерить время выполнения в миллисекундах, используя bash в Mac OS X?
- Почему мы используем cp для копирования файлов, а не dd? (В unix-производных)
- Основной вопрос * nix (Mac OS X): Где мой путь установлен?
- Как позволить утилите `man` использовать` less` для отображения руководства, а не `more`?
- Можно ли «мгновенно» создавать произвольные файлы?
- Как выполнить команду при каждом изменении файла?
- Есть ли сценарий, в котором необходим rm -rf -no-preserve-root?
- Что такое файл .bashrc?
- Подключение к сети Wi-Fi через терминал Mac
Поскольку OSX является BSD-ish-системой, в библиотеке strftime нет %N
( http://www.freebsd.org/cgi/man.cgi?query=date )
Команда bash builtin time
дает вам необходимую информацию?
time some work here
Я бы пошел по этому маршруту, если мне понадобилось миллисекунды, а BSD не поддерживал дату +%s%N
perl -MTime::HiRes -e 'printf("%.0f\n",Time::HiRes::time()*1000)'
echo $(($(date +%s%N)/1000000))
Это будет конвертировать с наносекунд в миллисекунды.
Из @mpy, date +%s.%N
работает.
Выход отличается от linux и OS X:
Linux: 1369322592.573787111
OS X: 1369322610.N
Как упоминалось в другом ответе, дата OS X не поддерживает% N (наносекунды).
Не могли бы вы просто сохранить команды во времени в качестве сценария? Или используйте для них подоболочку или командную группу:
time (sleep 0.1; echo a; sleep 0.1) time { sleep 0.1; echo a; sleep 0.1; }
Или суммируйте время отдельных команд:
$ time=$(TIMEFORMAT=%R; (time sleep 0.1; echo a) 2>&1 > /dev/null) $ time+=+$(TIMEFORMAT=%R; (time sleep 0.1) 2>&1) $ bc <<< $time .206
Или используйте некоторые скриптовые языки:
$ ruby -e 'puts "%.3f" % Time.now' 1369329611.046 $ time ruby -e '""' 0.029 $ time ruby -e 'puts "%.3f" % Time.now' 1369329622.943 0.029
%.3f
– спецификатор формата для числа с плавающей запятой с 3 десятичными точками. Time.now – это метод класса класса Time.
Гленн прав, time
– это команда, которую вы ищете, но для того, чтобы разобрать информацию, которую вы хотите, вам нужно передать ее на другой процессор, такой как sed
.
time command-goes-here >/dev/null 2>$1|sed rules-go-here
Эта команда избавится от вывода самой команды (отправляет как стандартные, так и ошибки в / dev / null) и передает результаты времени sed, где вам нужно будет выбрать соответствующие правила для редактирования потока и вывода Желаемое значение.
Если вы устанавливаете coreutils
вы можете использовать date
GNU Linux, написав gdate
.
Coreutils доступен с Homebrew: brew install coreutils
.