在bash中自动使用read和expect进行响应

时间:2016-05-15 21:26:14

标签: linux bash expect

我希望在提示用户输入其名称时自动执行该过程,它应自动写入world

#!/bin/bash

fullname=""
read -p "hello" fullname
/usr/bin/expect -c "expect hello {send world}"
echo $fullname 

上面的代码仍然等待输入用户输入。我想得到如下行为:

hello
world

是否可以使用expect实现此类行为?如果是,怎么样?

编辑:可以预期send world会将其结果存储在fullname变量中。所有想法都是fullname变量供以后使用

3 个答案:

答案 0 :(得分:2)

read -p "hello" fullname是您的脚本暂停的地方。 它将read用户输入并将其分配给fullname

以下脚本将实现您的要求。

#!/bin/bash

fullname=$(echo hello | /usr/bin/expect -c  "expect hello {send world}")
echo "hello " $fullname

expect从stdin读取,因此我们可以使用echo将数据发送给它。

然后将expect的输出分配给fullname

以下是您可能会发现有用的教程的链接。 Bash Prog Intro

答案 1 :(得分:2)

通常期望驱动/自动化其他程序,如ftp,telnet,ssh或bash甚至。使用bash来驱动期望脚本是可能的,但不是典型的。这是一个期望脚本,可以完成我认为你想要的东西:

[plankton@localhost ~]$ cat hello.exp
#!/usr/bin/expect

log_user 0
spawn read -p hello fn
expect {
        hello {
                send "world\r"
                expect {
                        world {
                                puts $expect_out(buffer)
                        }
                }
        }
}
[plankton@localhost ~]$ ./hello.exp
world

但是你可以看到它只是执行puts world

在bash中,人们可以这样做......

$ read -p "hello" fullname <<EOT
> world
> EOT
$ echo $fullname
world

...但是再一次只是漫长的过程:

fullname=world

答案 2 :(得分:0)

我不明白为什么你需要期待。为了满足您的要求,您需要做的就是:

this.props...

这会将“world”存储在“fullname”变量中。