3

我花了一天的大部分时间到处寻找答案,但到目前为止没有任何效果。我要做的是运行一个将附加到 GNU 屏幕会话的期望脚本,向它发送命令行参数(一个命令),并输出该命令的结果。到目前为止,这是我的脚本之一:


#!/usr/bin/expect -f


set timeout 3
#exp_internal 1

spawn screen -raAd call_sess
sleep 1

expect -re "\\\$" {
  send $argv
  send "\n"
  sleep 1
}

expect -re ".*" {
    set output $expect_out(0,string)
}

expect "\$" {
  send "\001"
  send "d"
}

expect eof {
  puts "OUTPUT---------------"
  puts $output
  puts "OUTPUT---------------"
}

并且 $expect_out(0,string) 只匹配换行符,即使 .* 应该匹配自上次匹配以来的所有内容。如果有人可以帮助我完成这项工作,那将是很棒的,我准备放弃并称其为不可能。

编辑:在评论中回答,但我应该指定命令确实在屏幕上运行,我只是无法正确捕获输出。

EDIT2:按照建议将脚本更改为生成屏幕,谢谢!

4

1 回答 1

2

答案的简单部分.*是匹配空字符串,因此进入expect_out.

困难的部分是屏幕会给你整个屏幕 - 包括任何以前的命令 - 所以仅仅找到你发送的命令的输出可能有点困难。

于 2012-11-07T19:17:28.010 回答