Quero executar um comando como:
command argument --parameter=param1,param2,param3
onde param1, param2, param3 podem ser qualquer número de parâmetros provenientes de um arquivo params.txt, cada um em uma linha.
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 assim funcionar:
echo $($(cat params.txt) | tr " " ",")
Qualquer ajuda muito apreciada.
Responder1
Vejamos este comando 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 " " ","
. Não era isso que você precisava.
Tentar:
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 separados por espaço. Em seguida, tr " " ","
substitua os espaços por vírgulas.
Observe que usando cat
o acima, mantemos a compatibilidade com POSIX. Isso significa, por exemplo, que este comando funcionará no shell padrão, /bin/sh
no Ubuntu e Debian e sistemas semelhantes.
Responder2
A respeito
command argument --parameter=$(tr '\n' ',' < params.txt)