Gerar várias opções de Bash de um arquivo de texto?

1

Eu tenho um comando que aceita nomes de domínio como opções. Eu tenho uma longa lista de nomes de domínio para incluir e então eu gostaria de automatizar a análise dessa lista de domínios no comando.

Por exemplo, o uso mais simples seria command --option=example-one.com --output=file.ext . Depois de adicionar a lista de domínios, o eventual comando a executar seria parecido com command --option=example-one.com ... --option=example-99.io --output=file.ext (onde '...' seria mais 97 opções, mostradas aqui abreviadas)

Isso é possível no Bash? Se sim, como é chamado?

Veja o que tentei até o momento não :

  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

O comando while read baddomains ; do echo -n '--option=$baddomains ' ; done < domains.txt > all-options.txt exibe uma lista de opções perfeitamente formatadas em um novo arquivo all-options.txt, mas não consigo entender como redirecionar a saída das opções de volta para o comando, em vez de um arquivo de texto.

A lista de domínios inclui caracteres cirílicos, se isso for importante.

    
por Tom Brossman 23.02.2017 / 15:36

2 respostas

1
command $(printf -- "--option=%s " $(<domains.txt)) --output=file.ext

é a maneira mais compacta que conheço.

O que você estava tentando deveria ter sido

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

mas não funcionou para você porque você usou as aspas erradas no subshell e incluiu todo o $() entre aspas duplas, de modo que command viu o todo como um argumento.

The list of domains includes Cyrillic characters, if that matters.

Não importa esses comandos, mas, se eles não forem devidamente codificados, como eles podem ser nomes de domínio válidos? Se eles são puncionados, o shell não verá nenhum caractere cirílico. Será feliz processar sua entrada corretamente em ambos os casos.

    
por 23.02.2017 / 16:42
1

Você pode criar uma matriz com os argumentos:

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

command "${args[@]}" --output=file.ext
    
por 23.02.2017 / 15:51

Tags