E sobre
command argument --parameter=$(tr '\n' ',' < params.txt)
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.
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.