Назад | Перейти на главную страницу

Создать несколько параметров Bash из текстового файла?

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

Например, простейшее использование было бы command --option=example-one.com --output=file.ext. После добавления списка доменов конечная команда для выполнения будет выглядеть так: command --option=example-one.com ... --option=example-99.io --output=file.ext (где '...' означало бы еще 97 вариантов, сокращенных здесь)

Можно ли это сделать в Bash, и если да, то как это называется, пожалуйста?

Вот что я пробовал не сделал пока работаю:

  1. command --option=$(cat domains.txt) --output=file.ext
  2. command "$(while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt)" --output=file.ext
  3. command --option="domains.txt" --output=file.ext

Команда while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt > all-options.txt выводит список идеально отформатированных параметров в новый файл all-options.txt, но я не могу понять, как перенаправить вывод параметров обратно в команду, а не в текстовый файл.

В списке доменов есть символы кириллицы, если это необходимо.

Вы можете построить массив с аргументами:

args=()
while read -r domain _; do
    args+=("--option=$domain")
done < domains.txt

command "${args[@]}" --output=file.ext
command $(printf -- "--option=%s " $(<domains.txt)) --output=file.ext

это самый компактный из известных мне способов.

То, что вы пытались, должно было быть

command $(while read baddomains ; do echo -n "--option=$baddomains " ; done < domains.txt) --output=file.ext

но это не сработало для вас, потому что вы использовали неправильные кавычки в подоболочке и заключили весь $() в двойных кавычках, чтобы command рассматривал все как один аргумент.

В списке доменов есть символы кириллицы, если это необходимо.

Для этих команд это не имеет значения, но, если они неправильно закодированы, как они могут быть действительными доменными именами? Если они зашифрованы, оболочка не увидит кириллические символы вообще. В обоих случаях он с радостью обработает ввод правильно.