"$(cat mydata)"
avalia uma string que contém o conteúdo do arquivo mydata
menos qualquer nova linha à direita. O que você quer é a lista de palavras separadas por espaços em branco no arquivo. Então, pela primeira vez, use a substituição de comando fora de aspas duplas:
myscript.sh $(cat mydata)
Para maior robustez, desative a globbing, para que, se uma coluna em mydata
contiver um dos caracteres \[*?
, não seja interpretada como um padrão de nome de arquivo. Você também pode definir IFS
para conter o caracteres separadores de palavras, mas o padrão (espaço em branco ASCII) deve ser exatamente o que você precisa.
(set -f; myscript.sh $(cat mydata))
Como alternativa, você pode usar o read
builtin. Isso lê a primeira linha e ignora o resto (o que você poderia fazer acima substituindo cat
por head -n 1
).
read -r one two three rest <mydata
myscript.sh "$one" "$two" "$three"