expect script:带方括号的字符串不匹配

时间:2015-07-24 02:57:36

标签: expect

我绝对不会期待命令。 假设有一个名为' 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?!

1 个答案:

答案 0 :(得分:1)

这些字符串匹配,但它们彼此之间没有。你需要使用更多的逃脱。

expect "Overwrite /opt/rails/rails_app/Gemfile\? \(enter \"h\" for help\) \\\[Ynaqdh\\\] "

这是因为[abcd]匹配abcd - 一个字符 - 而不是[abcd](六个) -character string)。