2014-12-20 2 views
1

Можете ли вы рассказать мне, почему этот сценарий Expect показывает мне календарь в режиме цикла? Я только хочу увидеть один календарь.Использование ожиданий для входа в систему и выдачи команды

#!/usr/bin/expect 
set fid [open /Users/john/secret] 
set password [read $fid] 
close $fid 

spawn ssh [lindex $argv 0]@[lindex $argv 1] 
expect { 
-re ".*Are.*.*yes.*no.*" { 
send "yes\n" 
exp_continue 
} 

"*?assword:*" { 
send $password 
send "\n" 
exp_continue 
} 

"*$*" { 
send "cal\r" 
exp_continue 
} 

"*$*" { 
send "exit\r" 
} 

ответ

2

Это кажется мне неправильным

"*$*" { 
send "cal\r" 
exp_continue 
} 

"*$*" { 
send "exit\r" 
} 

Проверка на знак доллара находится на том же уровне, поэтому после отправки cal\r вам цикл, и он будет искать $ снова и вопрос cal\r снова не доходя последние "*$*" {

Возможно, вы собираетесь это сделать?

#!/usr/bin/expect 
set fid [open /Users/john/secret] 
set password [read $fid] 
close $fid 

spawn ssh [lindex $argv 0]@[lindex $argv 1] 
expect { 
    -re ".*Are.*.*yes.*no.*" { 
     send "yes\n" 
     exp_continue 
    } 
    "*?assword:*" { 
     send $password 
     send "\n" 
     exp_continue 
    } 
    "*$*" { 
     send "cal\r" 
     expect "*$*" { 
      send "exit\r" 
     } 
    } 
} 

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

+0

Большое спасибо! Я прямо сейчас! – user1658549

Смежные вопросы