代码之家  ›  专栏  ›  技术社区  ›  GongT

expect:如何将EOF发送到衍生进程

  •  2
  • GongT  · 技术社区  · 8 年前

    我有一个程序从stdin读取并处理它。(如“tee/some/file”)

    该程序等待stdin结束以退出自身。

    如果我从 Expect ,在I之后 send 很多内容,如何发送“EOF”到程序?

    有一个 close 命令在意料之中,但它也会发出一个SIGHUP,而不能 expect 程序输出。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Donal Fellows    8 年前

    Expect通过使用生成的程序在其中运行的虚拟终端来工作(在非Windows上)。这意味着您可以通过发送字符序列来模拟关键帧。特别是 EOF control sequence is done with Ctrl + D ,成为字符U+000004。终端对此进行处理,将其转化为真正的EOF。

    根据您喜欢的转义序列,有几种方法可以编写它,但其中一种可行:

    # Hexadecimal-encoded escape
    send \x04
    
    # Octal-encoded escape
    send \004
    
    # UNICODE escape (also hexadecimal)
    send \u0004
    
    # Generate by a command
    send [format "%c" 4]
    

    当Expect使用Tcl 8.6时,它们都会生成相同的字节码,因此可以使用您喜欢的任何一种。