如何编写执行命令的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" 。我希望有人知道如何解决我的例子的简单解决方案
答案 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