Измерение уровня с оболочкой

Как вычесть время и выставочные секунды или миллисекунды?

  1. begin_time=$(date)
  2. выполните что-то, чтобы быть (быстры, просты и неофициальные) выполнение проверки
  3. echo $(date) - $begin_time

конечно, это не работает, как сделать это?

0
задан 25 March 2019 в 13:37

4 ответа

Bash имеет созданный в функции для названного time. Просто предварительно ожидайте его к любой команде, и это будет время, сколько времени команда берет для выполнения. Для большего количества информации посмотрите help time :)

[user@sol ~]$ time sleep 2

real    0m2.002s
user    0m0.002s
sys 0m0.000s

zsh имеет подобное встроенное, также названное time, хотя никакая страница справки для help time. Вот демонстрационный вывод:

[sol ~]$ time sleep 2
sleep 2  0.00s user 0.00s system 0% cpu 2.003 total
4
ответ дан 25 October 2019 в 23:58

В дополнение к time встроенный, там существует /usr/bin/time, который часто более полезен.

walt@bat:~(0)$ /usr/bin/time sleep 2
0.00user 0.00system 0:02.04elapsed 0%CPU (0avgtext+0avgdata 1756maxresident)k
80inputs+0outputs (1major+73minor)pagefaults 0swaps
walt@bat:~(0)$ /usr/bin/time -v sleep 2
    Command being timed: "sleep 2"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1828
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 73
    Voluntary context switches: 2
    Involuntary context switches: 0
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0
walt@bat:~(0)$ 

Или, если Вы действительно хотите сделать это вручную, читать man date и используйте date +%s.%N (%s = секунды с Эпохи, %N = наносекунды)

4
ответ дан 25 October 2019 в 23:58

Если Вы используете bash или zsh оболочке, и только нужно разрешение секунд, затем можно использовать их SECONDS переменная оболочки. От man bash:

SECONDS
       Each  time  this  parameter is referenced, the number of seconds
       since shell invocation is returned.  If a value is  assigned  to
       SECONDS,  the  value  returned upon subsequent references is the
       number of seconds since the assignment plus the value  assigned.

Так, при присвоении значения нуля прежде, чем выполнить команду (или последовательность команд), вычитание сделано для Вас.

Напр.

$ SECONDS=0 && sleep 2 && echo $SECONDS
2

Интересно, ksh93 имеет a SECONDS таймер, но это, кажется, обеспечивает разрешение миллисекунды:

$ ksh
$ SECONDS=0 && sleep 2 && echo $SECONDS
2.002

(Оболочка Korn - который предшествует bash и zsh - в более общем плане может обработать арифметику оболочки нецелого числа.)

4
ответ дан 25 October 2019 в 23:58

Согласовывание Вашего кода

(принятие Вы используете Bash),

begin_time=$(date +%s)  # Get seconds since Unix epoch.
sleep 2  # For example
echo $(($(date +%s) - begin_time)) seconds

Это должно произвести 2 seconds.

(N.B. Обычно необходимо заключить все расширения в кавычки, но эти значения, как гарантируют, будут целыми числами.)

Проблемы с Вашим кодом

begin_time= date
  • Для присвоения вывода команды к переменной синтаксис variable=$(command). Путем Вы записали это, это будет звонить date с begin_time как переменная среды - нисколько, что Вы хотите.
  • dateвывод является определенным для локали. Вот почему я использую время Unix вместо этого.
echo date - $(begin_time)
  • Это не находится в арифметическом контексте, таким образом, знак "минус" рассматривают как строку вместо оператора. Использовать $((expression)).
  • Для получения вывода команды (замена команды) использовать $(command)
  • Для получения значения переменной (замена параметра) использовать $variable или ${variable}.
1
ответ дан 25 October 2019 в 23:58

Другие вопросы по тегам:

Похожие вопросы: