如何执行自动化的Unixinput?

如何设置一个string来代替标准input? 例如,在Unix中运行latex命令时,总是会发现一些微不足道的错误,要跳过所有必须在命令行中input“r”的错误(我现在知道使用latex特别是可以使用-interactionmode nonstopmode有没有更通用的解决scheme来做到这一点?)是否有指定,这应该自动完成? 我尝试redirect标准input从包含“r \ n”的文件中读取,但是这不起作用。 我怎样才能做到这一点?

并非所有需要输入的应用程序都可以使用stdin重定向来满足。

这是因为应用程序可以调用isatty C函数(如果用C语言编写,或者用其他语言的一些等价的调用)来确定输入是否来自tty。

在这种情况下,有一个有价值的工具可以使用,这是期待的 。

latex --interaction=MODE 

其中MODE是以下之一:

  • errorstopmode :停止每一个错误,并要求输入
  • scrollmode :滚动非致命错误,但停在致命错误(如“找不到文件”)
  • nonstopmode :滚动非致命错误,中止致命错误
  • batchmode :像nonstopmode ,但不显示在终端messaes

对于交互式使用, errorstopmode (默认值)很好,对于非交互式使用, nonstopmodebatchmode更好。

但是要小心,没有微不足道的错误:所有的错误都必须修复,如果可能的话,所有的警告都应该被修复。

重定向标准输入工作在这里没有问题:

 /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. 

你有两个似是而非的答案,详细说明乳胶的处理方法。 一个评论表明你需要一个更一般的答案。

通常,推荐用于一般解决方案的工具是“ 期望 ”。 它安排命令有一个伪tty连接的输入和输出,命令交互与伪tty就像它真正的终端。 你告诉'期望'发送某些字符串,并期望其他字符串,与条件代码和正则表达式来帮助你这样做。

期望是使用Tcl / Tk构建的。 有其他语言的替代实现; Perl有一个Expect模块,例如。

从手册页 :

交互模式

设置交互模式。 模式可以是批处理模式,非停止模式,滚动模式和errorstopmode。 这些模式的含义与相应\命令的含义相同。

看起来像-interaction nonstopmode可能会帮助你。