Как выполнить автоматический ввод Unix? - PullRequest
0 голосов
/ 06 октября 2010

Как вы можете установить строку, которая будет использоваться вместо стандартного ввода? Например, при запуске команды latex в Unix всегда найдутся тривиальные ошибки, чтобы пропустить все ошибки, которые вы должны ввести «r» в командной строке (теперь я знаю, что с latex конкретно вы можете использовать -interactionmode nonstopmode, есть ли более общее решение для этого?) Есть ли способ указать, что это должно быть сделано автоматически? Я попытался перенаправить стандартный ввод для чтения из файла, содержащего «r \ n», но это не сработало. Как мне этого добиться?

Ответы [ 4 ]

4 голосов
/ 06 октября 2010

Не все приложения, которым требуется ввод, могут быть удовлетворены перенаправлением их стандартного ввода.

Это происходит потому, что приложение может вызывать функцию isatty C (если она написана на C, или некоторый эквивалентный вызов для других языков), чтобы определитьесли ввод поступил из tty или нет.

В такой ситуации есть ценный инструмент, который можно использовать, и это ожидайте .

2 голосов
/ 06 октября 2010

У вас есть два правдоподобных ответа, подробно описывающих, как конкретно обращаться с латексом. Один комментарий означает, что вам нужен более общий ответ.

Чаще всего инструмент, рекомендуемый для общего решения, это ' ожидайте '. Он организует, чтобы команда имела псевдо-tty, подключенный для ввода и вывода, и команда взаимодействует с псевдо-tty так же, как ваш реальный терминал. Вы говорите «ожидаете», что отправляете определенные строки, и ожидаете, что некоторые другие строки с условным кодом и регулярными выражениями помогут вам в этом.

Expect строится с использованием Tcl / Tk . Существуют альтернативные реализации для других языков; Например, в Perl есть модуль Expect .

2 голосов
/ 06 октября 2010
latex --interaction=MODE

, где MODE является одним из:

  • errorstopmode: останавливаться на каждой ошибке и запрашивать ввод
  • scrollmode: прокручивать нефатальноошибки, но останавливаться на фатальных ошибках (таких как «файл не найден»)
  • nonstopmode: прокручивать нефатальные ошибки, прерывать на фатальные ошибки
  • batchmode: подобно nonstopmode, но не отображать сообщения в терминале

Для интерактивного использования errorstopmode (по умолчанию) - это хорошо, для неинтерактивного использования nonstopmode и batchmode лучше.

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

Перенаправление stdin работает без проблем здесь:

/tmp $ tex '\undefined\end' <<< r
This is TeX, Version 3.1415926 (TeX Live 2010)
! Undefined control sequence.
<*> \undefined
              \end
? OK, entering \nonstopmode...
(see the transcript file for additional information)
No pages of output.
Transcript written on texput.log.
0 голосов
/ 06 октября 2010

со страницы руководства :

-режим взаимодействия

Устанавливает режим взаимодействия. Режимом может быть либо пакетный режим, нон-стоп-режим, режим прокрутки и режим ошибок Значение этих режимов такое же, как и у соответствующих \ команд.

Похоже, -interaction nonstopmode может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...