поймайте вывод сценария удара от, ожидают, ожидают, зависает

Я в настоящее время использую, ожидают передавать пароль rsync для копирования файлов через серверы Unix
test.sh

 ./expect.sh $password rsync -azvr  $username@$host:$file ./$dir

expect.sh

#!/usr/bin/expect -f                                                                                                                                                                                
eval spawn [lrange $argv 1 end]
#expect  "(yes/no)?"                                                                                                                                                                                
#send "yes\r"                                                                                                                                                                                       
expect "*?assword:*"
send [lindex $argv 0]
send \r
interact

если бы пароль сервера был изменен, но не обновил в сценарии, то я хотел бы получить уведомление. однако в настоящее время это было бы просто зависать неограниченно долго. Если я делаю следующее в test.sh

output=`./expect.sh $password rsync -azvr  $username@$host:$file ./$dir`

Теперь сценарий завис бы неограниченно долго, таким образом, я никогда не буду получать шанс обработать вывод. как я решаю эту проблему?

0
задан 14 February 2015 в 02:33
1 ответ

Вам следует отредактировать сценарий ожидания, чтобы учесть время ожидания и ожидаемый результат после rsync.

Например:

...
set timeout 60
expect "*?assword:*"
send [lindex $argv 0]
expect {
 timeout { send_user "\nFatal Error: unable to rsync \n"; exit 1}
 "denied" { send_user "\nFatal Error: unable to rsync \n"; exit 1}
 "sent"
}

Вышеупомянутое приведет к выходу из сценария в случае тайм-аута 60 секунд или при получении отклоненного ответа в случае неверного пароля. В противном случае, если он получает «отправленный» текст, он продолжается.

0
ответ дан 5 December 2019 в 12:58

Теги

Похожие вопросы