Вот ожидаемый файл, который может успешно работать.
#!/usr/bin/expect -f
set host vps_ip
set user test
set loginpwd passwd
set adminpwd passwd
set timeout 300
set prompt "#|>|\\\$"
spawn scp /home/wpdatabase_backup.sql $user@$host:/tmp
expect -nocase "password:"
send "$loginpwd\r"
expect eof
spawn ssh $user@$host
expect -nocase "password:"
send "$loginpwd\r"
expect -re $prompt
send "su\r"
expect "assword:"
send "$adminpwd\r"
expect -re $prompt
send "mysql -u root -pxxxx wpdatabase < /tmp/wpdatabase_backup.sql\r"
expect eof
Вот баш-файл:
mysqlword="xxxx"
mysqldump -u root -p$mysqlword wpdatabase > /home/wpdatabase_backup.sql
Теперь я хочу сделать файл ожидания вложенным в файл bash, потому что файл bash сложнее, чем файл ожидания, большинство строк в файле bash были опущены.
код:
#!/usr/bin/bash
mysqlword="xxxx"
mysqldump -u root -p$mysqlword wpdatabase > /home/wpdatabase_backup.sql
/usr/bin/expect <<EOD
set host vps_ip
set user test
set loginpwd passwd
set adminpwd passwd
set timeout 300
set prompt "#|>|\\\$"
spawn scp /home/wpdatabase_backup.sql $user@$host:/tmp
expect -nocase "password:"
send "$loginpwd\r"
expect eof
spawn ssh $user@$host
expect -nocase "password:"
send "$loginpwd\r"
expect -re $prompt
send "su\r"
expect "assword:"
send "$adminpwd\r"
expect -re $prompt
send "mysql -u root -pxxxx wpdatabase < /tmp/wpdatabase_backup.sql\r"
expect eof
<<EOD
Произошла ошибка: spawn scp /home/wpdatabase_backup.sql @:/tmp
ssh: не удалось разрешить имя хоста: имя или служба не известны
потеря соединения
send: spawn id exp6 не открыт
пока выполнение
"отправить "\r""
Цитирую терминатора:
cat<<'EOD'
set host vps_ip
set user test
spawn scp /home/wpdatabase_backup.sql $user@$host:/tmp
EOD
Результат:
set host vps_ip
set user test
spawn scp /home/wpdatabase_backup.sql $user@$host:/tmp
Но как заставить вывод результата работать в bash?
/usr/bin/expect <<cat<<'EOD'
set host vps_ip
set user test
spawn scp /home/wpdatabase_backup.sql $user@$host:/tmp
EOD
Код не может работать!
user=test
иhost=vps_ip
, вместо использования синтаксиса ожидания? - person Cyclonecode   schedule 09.08.2015/usr/bin/expect <<
: строка с кошкой должна читаться какcat<<'EOD'
. Что касается вашего сценария bash, он должен читаться как/usr/bin/expect << 'EOD'
(без кота). - person Jens   schedule 09.08.2015