【问题标题】:how to perform automated Unix input?如何执行自动 Unix 输入?
【发布时间】:2010-10-06 15:38:42
【问题描述】:

如何设置要使用的字符串而不是标准输入?例如,在 Unix 中运行 latex 命令时,它总是会发现一些微不足道的错误,要跳过所有错误,您必须在命令行中输入“r”(我现在知道专门使用 latex,您可以使用 -interactionmode nonstopmode,但是有没有更通用的解决方案来做到这一点?) 有没有指定这应该自动完成?我尝试重定向标准输入以从包含“r\n”的文件中读取,但这不起作用。 我怎样才能做到这一点?

【问题讨论】:

  • 超级用户的边际。它可能会在Tex LaTex and Friends 上得到更快的答案,但这可能是一个 shell 脚本问题,因此暂时可以接受。
  • 我应该说“向超级用户移动的边缘”。一开始就把它贴在那儿就好了。

标签: linux unix latex


【解决方案1】:

并非所有需要输入的应用程序都可以通过重定向标准输入来满足需求。

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

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

【讨论】:

    【解决方案2】:
    latex --interaction=MODE
    

    MODE 是其中之一:

    • errorstopmode:在每一个错误处停下来并请求输入
    • scrollmode:滚动到非致命错误,但在致命错误处停止(例如“找不到文件”)
    • nonstopmode:滚动到非致命错误,在致命错误时中止
    • batchmode: 喜欢nonstopmode,但不要在终端显示消息

    对于交互式使用,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.
    

    【讨论】:

      【解决方案3】:

      您有两个看似合理的答案,详细说明了具体处理 Latex 的方式。一条评论表明您需要一个更笼统的答案。

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

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

      【讨论】:

        【解决方案4】:

        来自man page

        -交互方式

        设置交互模式。模式可以是批处理模式、非停止模式、滚动模式和错误停止模式。这些模式的含义与对应的\commands含义相同。

        看起来-interaction nonstopmode 可能会对您有所帮助。

        【讨论】:

        • 这确实回答了我关于如何专门为乳胶做的问题,但不是我关于如何自动化输入的另一部分
        • 一般来说,你所做的(重定向标准输入)应该可以工作,但是如果程序直接从控制台读取而不是标准输入,它会失败,在这种情况下没有简单的解决方案。但我怀疑 LaTeX 是否属于这一类——也许你忽略了一些简单的事情。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 2011-02-19
        • 1970-01-01
        • 2014-05-29
        相关资源
        最近更新 更多