Подтвердить что ты не робот

Выход команды 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.

4b9b3361

Ответ 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