我绝对不会期待命令。 假设有一个名为' a.rb'的脚本文件,用ruby编写:
STDOUT << 'Overwrite /opt/rails/rails_app/Gemfile? (enter "h" for help) [Ynaqdh] '
s = STDIN.gets
STDOUT << s
它如下:
$ruby a.rb
Overwrite /opt/rails/rails_app/Gemfile? (enter "h" for help) [Ynaqdh] #wait user's input
y # show the user's input and exit
如果我想自动化用户的输入,那么使用expect命令似乎很好。
所以我尝试制作一个脚本文件(a.expect):
spawn ruby a.rb
expect "Overwrite /opt/rails/rails_app/Gemfile\? \(enter \"h\" for help\) \[Ynaqdh\] "
sleep 3
send "y\r"
但是这个脚本不起作用,我不知道为什么。 这是我的问题。
$ expect -f a.expect
spawn ruby a.rb
Overwrite /opt/rails/rails_app/Gemfile? (enter "h" for help) [Ynaqdh]
$ # <= expect script has finished because of (maybe) timeout?!
答案 0 :(得分:1)
这些字符串匹配,但它们彼此之间没有。你需要使用更多的逃脱。
expect "Overwrite /opt/rails/rails_app/Gemfile\? \(enter \"h\" for help\) \\\[Ynaqdh\\\] "
这是因为[abcd]
匹配a
,b
,c
或d
- 一个字符 - 而不是[abcd]
(六个) -character string)。