Как ответить на интерактивное приглашение, включающее несколько ответов в каждой строке - PullRequest
0 голосов
/ 04 декабря 2018

Уважаемое сообщество переполнения стека,

У меня проблемы с исполняемым файлом FORTRAN ("сборка" из Perple_X_6.8.5 на случай, если кто-нибудь об этом знает), который требует ввода через приглашения, которые я должен автоматизировать.Для подсказок, для ответа на которые требуется только одна строка, я нашел следующее решение:

./build << EOF
test                  `# Problem name deifnition`
hp02ver.dat           `# Declaration of the data base to be used`
perplex_option.dat    `# Declaration of the computational option file (default)`
N                     `# Tranform the data base components? (No)`
N                     `# Saturated fluids? (No)`
N                     `# Saturated components? (No)`
N                     `# chem. pot., activities, fugacities indipendet? (No)`
EOF

Однако следующее приглашение дает мне список компонентов, из которых я должен выбрать:

Select thermodynamic components from the set:
NA2O  MGO   AL2O3   SIO2  K2O   CAO   TIO2  MNO   FEO   O2    H2O   CO2
Enter names, 1 per line, press <enter> to finish:

Вот здесь и возникает проблема.Как бы я, следуя моему первоначальному решению для «простых» приглашений, отвечал на это приглашение, для которого требуется один компонент на строку и «ввод», чтобы перейти к следующему приглашению?

Я попробовал следующее:

./build << EOF
test                  `# Problem name deifnition`
hp02ver.dat           `# Declaration of the data base to be used`
perplex_option.dat    `# Declaration of the computational option file (default)`
N                     `# Tranform the data base components? (No)`
N                     `# Saturated fluids? (No)`
N                     `# Saturated components? (No)`
N                     `# chem. pot., activities, fugacities indipendet? (No)`
SIO2                  `# List of components`
TIO2
AL2O3
FEO
MNO
MGO
CAO
NA2O
K2O
H2O
EOF

, который возвратил эту ошибку:

Fortran runtime error: Sequential READ or WRITE not allowed after EOF marker, possibly use REWIND or BACKSPACE

Обратите внимание, что это не последняя подсказка во всей цепочке подсказок.Более простые и более «списковые» подсказки следуют примеру.

1 Ответ

0 голосов
/ 05 декабря 2018

(впервые опубликовано как комментарий, но другие думают, что это ответ)

Программа запрашивает Enter names, 1 per line, press <enter> to finish.
Каждая строка заканчивается <enter>, поэтому здесь программа хочетдополнительный <enter>.

Вставить пустую строку после последнего термодинамического компонента (перед EOF или другим вводом).

...