【问题标题】:No result on standard output when running expect运行期望时标准输出没有结果
【发布时间】:2010-09-23 07:02:01
【问题描述】:

每当我尝试运行脚本时,它都不会在标准输出上显示任何结果。

#!/usr/bin/expect --
send [exec tail -f /var/opt/jboss/log/jbossall.log | grep -i "pattern"]

请告知原因。

【问题讨论】:

  • 您是否知道使用选项 -f 您只得到最后一行 10 并且因此出现一次?所以你确定在调用之后有任何东西写入给定模式的文件。您是否在没有 grepping 的情况下测试了命令,只是为了查看给定的模式是否出现?
  • 是的,回答您的问题:来自 asf 服务器的日志文件 (jbossall.log) JBoss 日志总是每毫秒写入一次系统上的事务。
  • 另外,是的,文件总是以给定的模式写入。即使我测试了没有命令和更多命令,例如 :: #!/usr/bin/expect -- send [exec date] send [exec tail -F /var/opt/jboss/log/jbossall.log]跨度>
  • 输出在标准输出上显示日期,但 jbossall.log 文件中没有任何内容:-(
  • 只是添加...我在 $HOME 的 LINUX 系统上以 ./expect_learn_1.sh 的形式运行此脚本

标签: bash command expect


【解决方案1】:

exec 命令永远不会完成,因为您使用的是tail -f。来自tail的信息页面:“永远循环试图在文件末尾读取更多字符”。由于exec 未完成,因此永远不会调用send

你可能需要做这样的事情:

spawn whatever
set whatever_id $spawn_id

spawn sh -c {tail -f /var/opt/jboss/log/jbossall.log | grep -i "pattern"}
set tail_id $spawn_id

while {1} {
    expect -i $tail_id "(.*)\n"
    send -i $whatever_id $expect_out(1,string)
}

【讨论】:

  • 我提供了 Glenn 完全理解的两个实现细节,但这可能对 user451404 或其他读者有价值: 1. Expect 源代码中的“... while 1 ...”通常更惯用地表达与 exp_continue;并且,根据顶部“whatever”的性质,最好使用无期望标准、面向行的 Tcl 编写此脚本。
  • 感谢格伦,它对我有用 :-) @Cameron,感谢您的意见 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2014-07-30
  • 2021-04-16
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多