Выход команды Grep time
Используя time ls
, у меня есть следующий вывод:
$ time ls -l
total 2
-rwx------+ 1 FRIENDS None 97 Jun 23 08:59 location.txt
-rw-r--r--+ 1 FRIENDS None 10 Jun 23 09:06 welcome
real 0m0.040s
user 0m0.000s
sys 0m0.031s
Теперь, когда я пытаюсь выполнить grep
только строку реального значения, фактический результат:
$ time ls -l | grep real
real 0m0.040s
user 0m0.000s
sys 0m0.031s
Мой вопрос: как получить только реальное значение как выход? В этом случае 0m0.040s
.
Ответы
Ответ 1
time
записывает свой вывод в stderr, поэтому вам нужно передать stderr вместо stdout. Но также важно помнить, что time
является частью синтаксиса bash, и это время всего конвейера. Следовательно, вам нужно обернуть конвейер в фигурные скобки или запустить его в подоболочке:
$ { time ls -l >/dev/null; } 2>&1 | grep real
real 0m0.005s
С Bash v4.0 (возможно, универсальным в дистрибутивах Linux, но все еще не стандартным для Mac OS X), вы можете использовать |&
для соединения как stdout
, так и stderr
:
{ time ls -l >/dev/null; } |& grep real
В качестве альтернативы вы можете использовать утилиту time
, которая позволяет управлять выходным форматом. В моей системе эта утилита находится в /usr/bin/time
:
/usr/bin/time -f%e ls -l >/dev/null
man time
для получения дополнительной информации об утилите time
.
Ответ 2
(time ls -l) 2>&1 > /dev/null |grep real
Это перенаправляет stderr (который отправляет время на выход) в тот же поток, что и stdout, затем перенаправляет stdout на dev/null, поэтому вывод ls не захватывается, а затем передает то, что теперь выводит время в stdin grep.
Ответ 3
Если вы просто хотите указать выходной формат time
builtin, вы можете изменить значение переменной среды TIMEFORMAT
вместо фильтрации его с помощью grep
.
В этом случае
TIMEFORMAT=%R
time ls -l
предоставит вам только "реальное" время.
Здесь ссылка на соответствующую информацию в руководстве Bash (в разделе "TIMEFORMAT" ).
Этот вопрос является аналогичным вопросом о SO для анализа вывода time
.
Ответ 4
Я думаю, это можно сделать немного проще:
time ls &> /dev/null | grep real
Ответ 5
Посмотрите. bash имеет встроенную команду "время". Вот некоторые из отличий.
# GNU time command (can also use $TIMEFORMAT variable instead of -f)
bash> /usr/bin/time -f%e ls >/dev/null
0.00
# BASH built-in time command (can also use $TIME variable instead of -f)
bash> time -f%e ls >/dev/null
-f%e: command not found
real 0m0.005s
user 0m0.004s
sys 0m0.000s