期望只输出命令的标准输出,没有别的

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}]