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.