O Bash suporta documentos aqui e here strings para fornecer entrada padrão para um programa a partir de uma string. O seguinte:
./myprogram <<EOT
$lat1
$lon1
$filename1
EOT
fornecerá myprogram
três linhas de entrada, que são os valores das variáveis lat1
, lon1
e filename1
. Se você colocar dentro de um loop que define as variáveis apropriadamente a cada vez, você executará myprogram
muitas vezes, com entradas padrão diferentes toda vez.
<<EOT
marca um documento aqui: significa ler as linhas a seguir até que uma apenas diga " EOT
" e forneça isso como entrada padrão para o programa (como <
faz para um arquivo). Você pode usar o que quiser no lugar de EOT
, desde que seja o mesmo em ambos os lugares.
Você também pode usar uma string aqui:
./myprogram <<<"$lat
$lon
$filename"
Isso faz a mesma coisa, mas com um literal de cadeia de várias linhas. <<<"..."
pega a string dada e a transmite como entrada padrão como acima. Eu preferiria a versão heredoc, no entanto.
Uma abordagem alternativa que funciona mesmo em POSIX sh
é apenas criar o arquivo apropriado:
echo $lat > file
echo $lon >> file
echo $filename >> file
./myprogram < file
O documento aqui é melhor se você puder usá-lo, no entanto, o que eu suponho que você pode, já que isso é marcado como "bash".
Uma opção ainda mais usa \n
escapes e echo
ou printf
:
printf '%s\n%s\n%s\n' "$lat" "$lon" "$filename" | ./myprogram
echo -e "$lat\n$lon\n$filename" | ./myprogram
-e
é uma extensão comum para echo
que o Bash e outros shells suportam. printf
deve funcionar em qualquer sistema compatível com POSIX.