Задать вопрос
@NO_GLITCH

BASH Как создать динамическую переменную?

Пример
Используя curl посылается запрос на сервер, из ответа вытягивается title и пишется в файл
Список урлов берется из файла
Часть скрипта:
while read -r line
  do
	count_progress=$((++count_progress))
	export tmp_var1=$(curl -s $line/ | grep '<title>' )
	if [ "$tmp_var1" == "String" ]; then echo $line >> save_as; fi
        printf "$count_progress checked\r"
 done < $input


Хотелось бы не ждать завершение предыдущего curl и запускать их одновременно.
Нерабочий пример с добавлением символа &
while read -r line
  do
	count_progress=$((++count_progress))
	export tmp_var1=$(curl -s $line/ | grep '<title>' )&
	if [ "$tmp_var1" == "String" ]; then echo $line >> save_as; fi&
        printf "$count_progress checked\r"
 done < $input

Мне кажется что параллельный запуск можно сделать если задавать каждый раз разные переменные в месте где указывается tmp_var1, потому что каждый раз это значение перебивается новым запросом, на который еще не пришел ответ.
Вопрос именно в том как подставлять каждый раз новую переменную, например на основе строки из файла
echo $line | awk '$0="tmp_"$0'
  • Вопрос задан
  • 516 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Так должно работать, но идея с запуском неконтролируемого числа параллельных процессов тоже не особенно хороша:
while read -r line
  do
  count_progress=$((++count_progress))
  (
  export tmp_var1=$(curl -s $line/ | grep '<title>' )
  if [ "$tmp_var1" == "String" ]; then echo $line >> save_as; fi
        printf "$count_progress checked\r"
  ) &
 done < $input
Ответ написан
@ashumkin
системный разработчик
Влад Животнев уже дал правильный ответ :)
Вы пошли неэффективной дорогой и пытаетесь накостылить неэффективные решения, вместо того, чтобы выйти на правильную дорогу (parallel)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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