Я хочу выполнить что-то в оболочке Linux в нескольких различных условиях и иметь возможность выводить время выполнения каждого выполнения.
Я знаю, что мог бы написать Perl или Python-скрипт, который бы делал это, но есть ли способ сделать это в оболочке? (что случилось с Bash)
Ticks
подобный случай windows?Ответы:
Используйте встроенное
time
ключевое слово:Пример:
источник
time -p i=x; while read line; do x=x; done < /path/to/file.txt
? Он сразу возвращает 0.00, если я не помещаю ничего перед циклом while. Что дает?time
время как можно рассчитать весь конвейер как есть (благодаря тому, что он является ключевым словом Bash ), вам нужно использовать групповую команду ({ ...; ...; }
) дляtime -p { i=x; while read line; do x=x; done < /path/to/file.txt; }
type -a time
Вы можете получить гораздо более подробную информацию, чем встроенная в bash
time
(которую упоминает Роберт Гэмбл), используя time (1) . Обычно это так/usr/bin/time
.Примечание редактора: чтобы убедиться, что вы вызываете внешнюю утилиту,
time
а неtime
ключевое слово вашей оболочки , используйте ее как/usr/bin/time
.time
является утилитой под мандатом POSIX , но единственная опция, которую требуется поддерживать, это-p
.Конкретные платформы реализуют конкретные, нестандартные расширения:
-v
работает с GNU «stime
утилитами, как показано ниже (вопрос помеченлинукс); реализация BSD / macOS использует-l
для получения аналогичных результатов - смman 1 time
.Пример подробного вывода:
источник
источник
Для построчного измерения дельты попробуйте gnomon .
Вы также можете использовать опции
--high
и / или--medium
, чтобы указать порог длины в секундах, в течение которого гномон будет выделять метку времени красным или желтым цветом. И вы можете сделать еще несколько вещей.источник
Если вы хотите большей точности, используйте
%N
сdate
(и используйтеbc
для сравнения, потому что$(())
только обрабатывает целые числа).Вот как это сделать:
Пример:
Результат:
источник
Если вы собираетесь использовать время позже для вычисления, узнайте, как использовать
-f
опцию/usr/bin/time
для вывода кода, который экономит время. Вот некоторый код, который я недавно использовал, чтобы получить и отсортировать время выполнения целого ряда студенческих программ:Позже я объединил все
$timefile
файлы и направил вывод в интерпретатор Lua . Вы можете сделать то же самое с Python или Bash или любой другой ваш любимый синтаксис. Я люблю эту технику.источник
/usr/bin/time
необходим, потому что, хотяwhich time
вы скажете иначе, если вы просто запуститеtime
, он запустит версию вашей оболочки,time
которая не принимает никаких аргументов.env time
:-)Если вам нужна только точность с точностью до секунды, вы можете использовать встроенную
$SECONDS
переменную, которая подсчитывает количество секунд, в течение которых работает оболочка.источник
Вы можете использовать
time
и subshell()
:Или в той же оболочке
{}
:источник
(
&)
(новый контекст, subshell ), а другие - с{
&}
(та же оболочка, тот же контекст)Путь
вывод >>
источник
-lphtread
или-o
теги. Просто нужно использоватьtime
команду, которую принятый ответ объясняет лучше.Один, возможно, простой метод (который может не отвечать потребностям разных пользователей) - это использование оболочки PROMPT.it - простое решение, которое может быть полезно в некоторых случаях. Вы можете использовать функцию подсказок bash, как в примере ниже:
Приведенная выше команда приведет к изменению приглашения оболочки на:
Каждый раз, когда вы запускаете команду (или нажимаете ввод), возвращаясь к приглашению оболочки, в приглашении будет отображаться текущее время.
примечания:
1) имейте в виду, что если вы подождали какое-то время, прежде чем вводить следующую команду, то это время необходимо учитывать, т. е. время, отображаемое в приглашении оболочки, является меткой времени, когда отображалось приглашение оболочки, а не при вводе команды. некоторые пользователи нажимают клавишу Enter, чтобы получить новое приглашение с новой отметкой времени, прежде чем они будут готовы к следующей команде.
2) Существуют другие доступные опции и модификаторы, которые можно использовать для изменения приглашения bash, обратитесь к (man bash) для более подробной информации.
источник