Назначить результат измерения цикла for с помощью / usr / bin / time в переменной

Мне нужно выполнить команду curl внутри цикла for несколько раз и получить среднее время, затраченное на выполнение одного завитка. Это то, что у меня есть:

while read query; do TIMEFORMAT=%R; time for i in {1..3}; do curl -s -w '\n' -XPOST -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode query='${query}' ${nginx_url} > /dev/null; done done < queries.txt 

Это печатает количество секунд в stdout, но мне нужно назначить это число переменной, чтобы разделить ее на 3, чтобы получить среднее значение.

Я тестировал:

 realtime=$(time -f "%E" for i in {1..3} ..etc..) realtime=`time -f "%E" for i in {1..3} ..etc..` 

Но это дает синтаксическую ошибку ./test-suite.sh: line 23: syntax error near unexpected token do '.

Я также тестировал:

 realtime=$(bash -c "TIMEFORMAT=%R; time for i in {1..3} ..etc..") realtime=$(bash -c "time -f "%E" for i in {1..3} ..etc..") realtime=$(bash -c "TIMEFORMAT=%R; time for i in {1..3} do ..etc.. ; done; echo $realtime") 

Все они не имеют никаких результатов. Любые идеи приветствуются.

  • Когда важно писать переносные скрипты?
  • Запустить команду через определенный промежуток времени?
  • синтаксическая ошибка возле неожиданного токена `do
  • запустить сценарий при выключении в Debain
  • Формат Bash возвращает нули для HM
  • Полностью вывести команду буфера перед тем, как подключиться к другой команде?
  • Запуск сценариев компиляции только в том случае, если исходный файл более поздний, чем скомпилированная программа
  • Распечатайте сообщение с левой стороны трубы
  • 2 Solutions collect form web for “Назначить результат измерения цикла for с помощью / usr / bin / time в переменной”

    Мое предложение было бы (слегка изменено, так как у меня нет настроек curl / HTTP):

     $ t=$(TIMEFORMAT=%R bash -c 'time for i in {1..3}; do sleep $((RANDOM % 5)); done' 2>&1) $ avg=$(bc <<< "scale=3; $t/3") $ echo $avg # YMMV 2.667 

    Поскольку time является встроенным bash, нам нужно поместить перенаправление stderr «снаружи» вызова времени; вот почему я завернул основную часть bash -c ...

    Вам не нужно устанавливать TIMEFORMAT каждый раз через цикл; просто поставьте его в среду для вызова bash / time.

    Обратите внимание, что арифметика оболочки является целочисленной, поэтому для значений с плавающей запятой используйте что-то вроде bc . У моего вывода time было 3 десятичных разряда, так что я и попросил bc .

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

     mytime=$(time (for i in {1..3}; do curl -s -w '\n' -XPOST -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode query='select distinct ?Concept where {[] a ?Concept} LIMIT 100' http://143.233.226.61:443/sparql > /dev/null; done) 2>&1 1>/dev/null) 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.