2017-01-04 17 views
0

Я смотрел в Expect manpage и Googled, но я не нашел то, что -r для ожидания. Я видел этот параметр, используемый перед тем, как этотЧто означает «-r», как в команде «ожидать -r PATTERN» от Expect?

expect -r "\r\n\r\n" 

в expect сценарии, но не могу понять, что это за. Кто-нибудь знает, где я могу найти ответ? Заранее спасибо

+0

Ты что, это '-r', но не' \ r' или '-re'? – RomanPerekhrest

+1

Пожалуйста, добавьте полную команду. – adiesner

+0

Да, это r. Полная команда: «ожидать -r» somePattern »' – chromechris

ответ

5

Это также немного смутило меня, когда я увидел, что кто-то использовал expect -regexp PATTERN, потому что на странице руководства он упоминает только expect -re PATTERN. Я пробовал expect -regexp PATTERN, и он действительно работает.

В какой-то момент я загрузил ожидаемый source code и посмотрел и выяснил причину.

В исходном коде (см функцию parse_expect_args() в expect.c), то expect «опции s фактически определены следующим образом:

static char *flags[] = { 
    "-glob", "-regexp", "-exact", "-notransfer", "-nocase", 
    "-i", "-indices", "-iread", "-timestamp", "-timeout", 
    "-nobrace", "--", (char *)0 
} 

затем в функции он вызывает Tcl» s Tcl_GetIndexFromObj(interp, objPtr, tablePtr, msg, flags, indexPtr) разобрать параметры командной строки. Accordint к Tcl_GetIndexFromObj() «s manual:

... совпадение происходит, если objPtr» строковое значение s является идентичен одному из строки в tablePtr, или если это непустое уникальное сокращение для одной из строк в tablePtr и TCL_EXACT флаг не указан; ...

Здесь Expect звонки Tcl_GetIndexFromObj() с flags = 0 (не TCL_EXACT) так документированной -gl, -re и -ex на странице человека, на самом деле -glob, -regexp и -exact соответственно. И так как есть только один вариант -regexp, начинающийся с -r, так -r просто означает то же, что и -regexp-re).

Лично я рекомендую документированные параметры, которые все еще используются, чтобы не путать других людей.

+0

Вау! Ха-ха, много копать! Это потрясающе, спасибо большое. – chromechris