xterm чрезвычайно стар и не очень многофункционален. Я предлагаю на самом деле испытать его и сравнить его с более современным эмулятором терминала.
Bash поддерживает здесь документы и здесь строки для обеспечения стандартного ввода в программу из строки. Следующее:
./myprogram <<EOT
$lat1
$lon1
$filename1
EOT
даст myprogram
три строки ввода, которые являются значениями lat1
, lon1
и filename1
переменные. Если вы поместите это в цикл, который каждый раз устанавливает переменные соответствующим образом, вы будете запускать myprogram
много раз, каждый раз с разным стандартным вводом.
<< EOT
отмечает здесь документ: это означает читать следующие строки до тех пор, пока не будет просто сказано « EOT
», и предоставить это в качестве стандартного ввода для программы (например, <
делает для файла). Вы можете использовать все, что захотите, вместо EOT
, если оно одинаково в обоих местах.
Вы также можете использовать здесь строку:
./myprogram <<<"$lat
$lon
$filename"
Это делает то же самое, но вместо этого с многострочным строковым литералом. <<< "..."
берет заданную строку и передает ее как стандартный ввод, как указано выше. Однако я бы предпочел версию heredoc.
Альтернативный подход, который работает даже в POSIX sh
, заключается в том, чтобы просто создать соответствующий файл:
echo $lat > file
echo $lon >> file
echo $filename >> file
./myprogram < file
Этот документ лучше, если вы можете его использовать, хотя я предполагаю, что вы можете, поскольку это помечен как "bash".
Еще одна опция использует \ n
escape-последовательности и либо echo
, либо printf
:
printf '%s\n%s\n%s\n' "$lat" "$lon" "$filename" | ./myprogram
echo -e "$lat\n$lon\n$filename" | ./myprogram
-e
является обычным расширением для ] echo
, поддерживаемый Bash и другими оболочками. printf
должен работать в любой POSIX-совместимой системе.
Легкий (и портативный) способ подачи нескольких строк ввода в программу - это
{
echo 'lat1'
echo 'lon1'
echo 'filename1'
} | ./myprogram
Альтернативный подход заключается в использовании здесь документа .