期望只输出命令的标准输出,没有别的
expect output only stdout of the command and nothing else
如何编写执行命令并只打印命令输出的 expect 脚本?
我尝试了各种方法,但 none 有效,例如
#!/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”。我希望有人知道如何修复我的示例的简单解决方案
好的,看起来下面的脚本做了(至少类似于)我需要的:
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
从发送的命令中捕获输出在 expect 中有点痛苦。
这是一个不依赖于 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
我突然想到一个想法:如果命令不需要任何交互,那么 expect 就太过分了:只需使用 exec
set output [exec bash -c {echo $RANDOM}]
如何编写执行命令并只打印命令输出的 expect 脚本?
我尝试了各种方法,但 none 有效,例如
#!/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”。我希望有人知道如何修复我的示例的简单解决方案
好的,看起来下面的脚本做了(至少类似于)我需要的:
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
从发送的命令中捕获输出在 expect 中有点痛苦。
这是一个不依赖于 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
我突然想到一个想法:如果命令不需要任何交互,那么 expect 就太过分了:只需使用 exec
set output [exec bash -c {echo $RANDOM}]