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

Linux 在bash中使用read和expect自动响应,linux,bash,expect,Linux,Bash,Expect,我想自动化这个过程,当用户被提示输入他的名字时,它应该自动写入world 上面的代码仍在等待用户输入。我想得到如下行为: hello world 使用expect可以实现这样的行为吗?如果是,如何进行 编辑:可以预期send world会将其结果存储在fullname变量中。所有的想法都是为了以后使用fullname变量read-p hello fullname行是脚本暂停的地方。 它将读取用户输入并将其分配给fullname 下面的脚本将实现您的要求 #!/bin/bash fullnam

我想自动化这个过程,当用户被提示输入他的名字时,它应该自动写入world

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

hello
world
使用expect可以实现这样的行为吗?如果是,如何进行

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

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

下面的脚本将实现您的要求

#!/bin/bash

fullname=$(echo hello | /usr/bin/expect -c  "expect hello {send world}")
echo "hello " $fullname
期望从stdin读取数据,以便我们可以使用echo将数据发送给它

然后expect的输出被分配给fullname


这里有一个链接,指向你可能会觉得有用的教程

通常期望驱动/自动化其他程序,例如ftp、telnet、ssh或bash。使用bash驱动expect脚本是可能的,但不是典型的。下面是一个expect脚本,它实现了我认为您需要的功能:

[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
但正如你所看到的,这是一个漫长的道路,只是世界

在bash中可以这样做

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

我不明白你为什么需要期待。要满足您的要求,您只需执行以下操作:

echo world | /path/to/your/script

这将把world存储在fullname变量中。

为什么不在expect中编写脚本呢。如果你知道Tcl你的设置,它基本上就是Tcl。现在还不清楚你到底在问什么。这可能是一个“是的,但不清楚你们想要实现什么”的例子。比如为什么要使用expect?为什么不把全名设为world呢?第一个原因是我想学习。第二个原因,我计划扩展代码用于其他目的。我认为这个问题正好描述了我要做的事情。在处理expect之前,熟悉bash可能是个好主意。我在我的回答中留下了一个链接,但是网上有很多链接,请阅读其中一些,以找到一个与你的水平相符的链接。
fullname=world
echo world | /path/to/your/script