2015-04-19 6 views
1

Im пытается сделать только сценарий, который будет принимать меры, только если строка не присутствует на выполнении команды: например:Исключение действие, когда условие не выполняется

send -- "sys set -nd\r" 
expect "showdebugcommands" {} "\n$PROMPT" {send -- "sys set showdebugcommands 1\r"} 

Что я хочу сделать, это: НИЧЕГО, если «showdebugcommands» присутствует на выходе cmd, но в случае, если это не так, выполните команду «sys set showdebugcommands 1».

Как я могу достичь этого, используя ожидание?

ответ

2

Попробуйте

set seen false 
expect { 
    "showdebugcommands" {set seen true; exp_continue} 
    "\n$PROMPT" 
} 
if { ! $seen} { 
    send -- "sys set showdebugcommands 1\r" 
} 
+0

Спасибо, Гленн! Я не знаю, почему оператор IF не запускается, когда слово showdebugcommands присутствует после выполнения cmd. Что-нибудь, чего я не могу пропустить? – Frosa

+0

Разве это не то, что вы хотите? Вы сказали, что хотите ничего не делать, если это слово видно. –

+0

Ops. был моим плохим. Капитализация ... спасибо за помощь. отлично работал. – Frosa

0

Один из способов сделать это путем вложения в expect внутри expect. Это совершенно законно.

send -- "sys set -nd\r" 
expect { 
    "showdebugcommands" { 
     expect "\n$PROMPT" 
    } 
    "\n$PROMPT" { 
     send -- "sys set showdebugcommands 1\r" 
     expect "\n$PROMPT" 
    } 
} 

Цель состоит в том, чтобы вернуть активность в известное состояние (приглашение), увидев то, что вы хотели. Всегда полезно подумать о единицах кода, которые возвращают вещи в известное состояние. (Из-за этого я также добавил еще expect подсказки после внутреннего send, давайте вернемся к состоянию «Я только что видел подсказку» в конце внешнего expect, так как это наименее сумасшедший вариант.)

+0

Отлично. работал как шарм. Благодарю. – Frosa