Пространство, которое Expect ищет при поиске подходящих предметов, может включать в себя новые строки, поэтому важно при использовании квантификаторов предпринимать шаги, чтобы избежать случайного пересечения строк. Например, я подозреваю, что следующая подсказка с большей вероятностью будет работать:
set PROMPT {(?n)^irb.*[*">] }
Вы также можете использовать более ограниченный набор вещей при разборе изменяющейся части приглашения:
set PROMPT {(?n)^irb[^\s*">]*[*">] }
Написание регулярного выражения, которое будет точно соответствовать тому, что вы хотите, может потребовать немало усилий; на самом деле это немного искусство, но чтение определения синтаксиса RE Tcl может очень помочь. (За последние 10 лет он не сильно изменился.)
Еще одна вещь, которую нужно проверить, - задыхается ли Ruby в Windows от прямой косой черты в именах файлов. Если это произойдет, вам нужно будет использовать file nativename
для преобразования:
exp_spawn $RUBY_HOME/bin/ruby.exe [file nativename $RUBY_HOME/bin/irb] --noinspect
(я бы не стал использовать file join
в этой ситуации.)