Linux 在bash中使用read和expect自动响应
我想自动化这个过程,当用户被提示输入他的名字时,它应该自动写入world 上面的代码仍在等待用户输入。我想得到如下行为: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
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