预计脚本:字符串方括号不匹配(expect script: string with square b

2019-10-24 03:01发布

我绝对新的期望命令。 假设有一个名为“a.rb”的脚本文件,这是写在红宝石:

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

这似乎很好用期待的命令,如果我要自动运行的用户的输入。

所以,我试图让一个脚本文件(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?!

Answer 1:

这些字符串匹配,但他们不给glob的彼此 。 您需要使用更多的逃逸。

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

这是因为, [abcd]匹配abcd -一个字符-不[abcd]六个字符的字符串)。



文章来源: expect script: string with square braces doesn't match
标签: expect