【发布时间】:2018-04-28 14:38:59
【问题描述】:
我有一个从标准输入读取并处理它的程序。 (比如“tee /some/file”)
这个程序等待标准输入端退出。
如果我从Expect 生成它,在我send 很多内容之后,如何向程序发送“EOF”?
Expect中有close命令,但它也会发送SIGHUP,不能expect程序输出了。
【问题讨论】:
-
我认为
send \x04可以。这会发送一个 Ctrl+D。
我有一个从标准输入读取并处理它的程序。 (比如“tee /some/file”)
这个程序等待标准输入端退出。
如果我从Expect 生成它,在我send 很多内容之后,如何向程序发送“EOF”?
Expect中有close命令,但它也会发送SIGHUP,不能expect程序输出了。
【问题讨论】:
send \x04 可以。这会发送一个 Ctrl+D。
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 时,它们都会生成相同的字节码,因此请使用您喜欢的任何一个。
【讨论】: