Bash 如何使用expect将stdout从程序连续重定向到生成的进程中?

Bash 如何使用expect将stdout从程序连续重定向到生成的进程中?,bash,tcl,expect,Bash,Tcl,Expect,需要打开telnet,发送一些命令,然后从pocketsphinx发送stdout 当前expect将等待程序完成,然后将所有内容输出到telnet进程。 我需要pocketsphix不断地为生成的telnet进程提供数据 这就是我到目前为止所做的: #!/usr/bin/expect -d set send_human {.1 .3 1 .05 2} spawn telnet 192.168.1.104 23 expect “*” send "\x01"; send "2\r" expect

需要打开telnet,发送一些命令,然后从pocketsphinx发送stdout

当前expect将等待程序完成,然后将所有内容输出到telnet进程。 我需要pocketsphix不断地为生成的telnet进程提供数据

这就是我到目前为止所做的:

#!/usr/bin/expect -d
set send_human {.1 .3 1 .05 2}
spawn telnet 192.168.1.104 23
expect “*”
send "\x01"; send "2\r"
expect “:”
send -h "hello world\r"
send -h "goodbye world\r"
send -h "Test Test Test\r"
send -- [exec pocketsphinx_continuous -infile speech.wav 2> /dev/null ]\n

您可以使用expect命令
interact
将两个衍生进程连接在一起

默认情况下,
interactive
期望用户写入预期进程的stdin并读取预期进程的stdout 它本身u标志(表示“user”)使interactive将用户作为由其参数命名的进程进行查找 (必须是衍生id)

这允许两个不相关的进程在不使用显式循环的情况下连接在一起。协助 调试,Expect diagnostics总是转到stderr(或stdout获取某些日志记录和调试信息)。 出于同样的原因,解释器命令将以交互方式从stdin读取

比如说

set send_human {.1 .3 1 .05 2}
spawn telnet 192.168.1.104 23
expect “*”
send "\x01"; send "2\r"
expect “:”
send -h "hello world\r"
send -h "goodbye world\r"
send -h "Test Test Test\r"

set sid_telnet $spawn_id
spawn pocketsphinx_continuous -infile speech.wav 2> /dev/null 

interact -u $sid_telnet

interactive是否适用于交互程序是诅咒程序的情况?当然,它适用于任何使用终端的程序