Считайте многократные въезды из входного файла

xterm чрезвычайно стар и не очень многофункционален. Я предлагаю на самом деле испытать его и сравнить его с более современным эмулятором терминала.

2
31.07.2014, 05:20
2 ответа

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-совместимой системе.

1
27.01.2020, 22:13

Легкий (и портативный) способ подачи нескольких строк ввода в программу - это

{
  echo 'lat1'
  echo 'lon1'
  echo 'filename1'
} | ./myprogram

Альтернативный подход заключается в использовании здесь документа .

1
27.01.2020, 22:13

Теги

Похожие вопросы