В настоящее время я использую ожидание передачи пароля в rsync для копирования файлов на серверы unix
test.sh
./expect.sh $password rsync -azvr $username@$host:$file ./$dir
ожидать.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`
Теперь сценарий зависал на неопределенное время, поэтому у меня никогда не было возможности обработать вывод. как мне решить эту проблему?
Вам следует отредактировать свой сценарий ожидания, чтобы учесть время ожидания и ожидаемый результат после 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 секунд или при получении отклоненного ответа в случае неверного пароля. В противном случае, если он получает «отправленный» текст, он продолжается.