期望输出只有命令的stdout而没有别的

时间:2017-07-20 09:14:39

标签: stdout expect

如何编写执行命令的expect脚本并仅输出命令的输出?

我尝试了各种各样的东西,但都没有,例如。

#!/usr/bin/expect
log_user 0
spawn bash
send "echo 1\r"
log_user 1
expect "1"
log_user 0
send "exit\r"
expect eof

提供输出:

  

echo 1

虽然我只需要" 1" 。我希望有人知道如何解决我的例子的简单解决方案

2 个答案:

答案 0 :(得分:1)

从发送的命令中捕获输出有点令人期待。

这是一个不依赖于log_user设置的更一般情况,它使用正则表达式捕获输出:

#!/usr/bin/expect
log_user 0
spawn bash

# set the prompt to a known value
send "PS1='>'\r"
expect -re {>$}

# send a command: we don't know what the output is going to be
send "echo \$RANDOM\r"

# capture the portion of the output that occurs just before the prompt
expect -re "\r\n(.*?)\r\n>$"
puts "output is: $expect_out(1,string)"

send "exit\r"
expect eof

我刚想到一个想法:如果命令不需要任何交互,那么期望是过度的:只需使用exec

set output [exec bash -c {echo $RANDOM}]

答案 1 :(得分:0)

好的,它看起来跟随脚本(至少类似于)我需要的东西:

log_user 0
spawn bash
expect "#" {} "\\\$" {}
send -- "echo AA\r"
expect -- "echo AA\r" {}
log_user 1
expect -- "AA"
log_user 0
send -- "exit\r"
expect eof