Назначить результат измерения цикла 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, чтобы получить среднее значение.

  • Есть ли способ передать переменную из выражения awk в функцию bash в качестве аргумента?
  • Как разбить массив в наборе из пяти файлов и загрузить их параллельно?
  • Сравните два файла и распечатать совпадения
  • Как установить SHELL = / bin / bash глобально для cron
  • Команды Emacs в xterm
  • Могу ли я использовать переменные внутри {} расширения без `eval`?
  • Я тестировал:

     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") 

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

  • Как правильно использовать pgrep внутри bash?
  • Bash: Цитирование через строку
  • Проверьте, существует ли файл на удаленном компьютере с пробелами в имени файла и / или пути
  • Перенаправление стандартного вывода и стандартная ошибка для одного файла
  • Bash: Захват / использование последней (или N-й) строки в stdout
  • Переименовывать файлы на основе их родительского каталога с помощью команды find / xargs?
  • 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) 
    Linux и Unix - лучшая ОС в мире.