Я пытаюсь найти подсказку, но оператор OR в круглых скобках (%|#) не работает.

Следующее РАБОТАЕТ только для% завершающих подсказок и НЕ РАБОТАЕТ с # конечными подсказками:

set FULLPROMPT "${HOST} (.+)(%|#) $"

Следующее НЕ РАБОТАЕТ ни с одним запросом: /:

set FULLPROMPT "${HOST} (.+)% $"

Я явно чего-то упускаю.

Подсказки могут быть такими

12:33 user@hostname ~%
12:33 root@hostname /usr/local/folder#

Ожидание работает как

set HOST "hostname"
set FULLPROMPT "${HOST} (.+)(%|#) $"
send "\n"
expect -re $FULLPROMPT

Любая помощь была бы высоко оценена

0
Franck 23 Сен 2018 в 15:53

1 ответ

Лучший ответ

Благодаря Шелте Брону я теперь могу точно видеть, как регулярное выражение соответствует подсказкам. Оказывается, у приглашения есть цвета, и это помещает всевозможные символы до и после % или #.

Чтобы преодолеть это, вы можете либо

  1. переопределить переменную подсказки PS1
  2. позаботьтесь обо всех скрытых символах приглашения в регулярном выражении
  3. захватить приглашение при входе в систему и использовать его в регулярном выражении (похоже, что мы ДОЛЖНЫ сделать, но это кажется большой работой)

Запустить ожидание в режиме отладки:

expect -d 
2
Donal Fellows 23 Сен 2018 в 14:38