Linux CMD - Как измерить время для двух команд друг за другом? - PullRequest
1 голос
/ 21 января 2020

Я знаю, что могу найти время, которое занимает команда, просто записав время перед ней, например, для

time git pull

Я также знаю, что могу выполнять две команды друг за другом, с использованием ";" символ, такой как в

git pull ; git reset

Однако я не могу понять, как объединить два.

time git pull ; git rebase

Это просто занимает время первой команды и печатает ее перед выполнением второй. Я хочу получить объединенное время обеих команд для печати после завершения обеих. Кто-нибудь знает, как этого добиться?

Ответы [ 3 ]

3 голосов
/ 21 января 2020

Просто используйте паратезы:

# time sleep 1; sleep 1     # <-- this does not work

real    0m1.003s
user    0m0.001s
sys     0m0.001s
# time (sleep 1; sleep 1)   # <-- this one works

real    0m2.004s
user    0m0.001s
sys     0m0.002s

Я бы предложил использовать && вместо ;, как

# time (sleep 1 && sleep 1)

Таким образом, вторая команда выполняется только тогда, когда Первый был успешным. С ; обе команды выполняются несмотря ни на что. Просто мои предпочтения.

0 голосов
/ 21 января 2020

Поскольку вы пометили linux, я собираюсь сделать дикое предположение, что вы используете встроенный time для bash, хотя большая часть этого ответа будет в целом применима к любой оболочке. В документации bash мы читаем:

* Конвейер - это последовательность из одной или нескольких команд, разделенных одним из операторов управления | или | &. Формат для конвейера:

 [time [-p]] [ ! ] command [ [|||&] command2 ... ]*

Итак, мы видим, что время применяется к конвейеру, который состоит из команд. Команды могут быть составными командами, одна из форм которых { list: }. Итак, для вашего случая вы можете написать:

time { git pull; git rebase; }

(хотя для этого конкретного случая, кажется, лучше сделать time git rebase -r)

0 голосов
/ 21 января 2020

Вы можете использовать paranthesis и && как разделитель команд.

В качестве альтернативы вы можете создать скрипт и

time yourscript.sh

с тем же эффектом.

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

start=`date +%s`
sleep 5
end=`date +%s`
runtime=$((end-start))
echo $runtime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...