我有一个从stdin读取的程序并处理它。 (如“tee / some / file”)
此程序等待stdin结束退出。
如果我从Expect
生成它,在send
多个内容之后,如何向程序发送“EOF”?
在Expect中有一个close
命令,但它也会发送一个SIGHUP,并且不能再expect
个程序输出。
答案 0 :(得分:2)
Expect通过使用生成的程序在其中运行的虚拟终端(在非Windows上)工作。这意味着您可以通过发送字符序列来模拟键来完成任务。特别是EOF control sequence is done with Ctrl+D,它变成了字符U + 000004。终端处理它以将其变成真正的EOF。
有几种方法可以编写它,具体取决于您喜欢哪种转义序列,但其中一种方法可行:
csscript.exe
# Hexadecimal-encoded escape
send \x04
# Octal-encoded escape
send \004
# UNICODE escape (also hexadecimal)
send \u0004
当Expect使用Tcl 8.6时,这些都会生成相同的字节码,因此请根据您的喜好使用。