Especificando parâmetros de linha de comando separados por vírgula com base em linhas de arquivo de texto

1

Eu quero executar um comando como:

command argument --parameter=param1,param2,param3

onde param1, param2, param3 pode ser qualquer número de parâmetros provenientes de um arquivo params.txt, cada um em uma linha.

Eu posso criar uma lista correta de parâmetros com

echo $(cat common.modules) | tr " " ","

Mas tentando

command argument --parameter=$(cat params.txt) | tr " " ","

e suas variantes óbvias falham, provavelmente porque não consigo fazer algo como isso funcionar:

echo $($(cat params.txt) | tr " " ",")

Qualquer ajuda muito apreciada.

    
por Jonathan 15.06.2016 / 20:16

2 respostas

1

E sobre

command argument --parameter=$(tr '\n' ',' < params.txt)
    
por 16.06.2016 / 08:02
3

Vamos ver esse comando a partir da pergunta:

command argument --parameter=$(cat params.txt) | tr " " ","

Isso executa o comando command argument --parameter=$(cat params.txt) e canaliza sua saída para tr " " "," . Isso não é o que você precisava.

Tente:

command argument --parameter="$(echo $(cat params.txt) | tr " " "," )"

Aqui, echo $(cat params.txt) faz com que a divisão de palavras seja feita no conteúdo de params.txt . Isso resulta em todos os parâmetros sendo separados por espaços. Então, tr " " "," substitui os espaços por vírgulas.

Observe que, usando cat no acima, mantemos a compatibilidade POSIX. Isto significa, por exemplo, que este comando funcionará sob o shell padrão, /bin/sh , no Ubuntu e no Debian e sistemas similares.

    
por 15.06.2016 / 20:22