我希望在提示用户输入其名称时自动执行该过程,它应自动写入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
变量供以后使用
答案 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”变量中。