这个expect脚本问题出现在哪里呢?-灵析社区

sumous_01

下面的脚本的目的是ssh连接远程服务器,执行dump命令,将数据库dump为sql文件,并且压缩为zip文件。 echo ' dump 数据 并 zip ' /usr/bin/expect /db_name.sql \r"} expect "root@*" {send "zip db_dump_file.zip db_name.sql \r"} expect "root@*" {send "exit \r"} eof echo done! 输出结果为: [root@localhost ~]# mysqldump -uuser -h localhost -ppwd db_name > /db_name.sql Warning: Using a password on the command line interface can be insecure. mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces 结果是mysqldump命令执行了,但是zip命令未能执行。从输出来看dump命令输出了一个warning和一个error我尝试将脚本修改为如下内容(添加了两行Warning、mysqldump的expect)但是未能解决问题。 echo ' dump 数据 并 zip ' /usr/bin/expect /db_name.sql \r"} expect "Warning*" {send " "} expect "mysqldump*" {send " "} expect "root@*" {send "zip db_dump_file.zip db_name.sql \r"} expect "root@*" {send "exit \r"} eof echo done! 请问为何压缩命令没有执行呢?

阅读量:96

点赞量:1

问AI
已解决问题。 1. send 命令放在大括号中执行是异步的,需要拿出来。 2. 命令执行默认有超时时间,需要设置为不超时。 修改后如下: echo ' dump 数据 并 zip ' /usr/bin/expect /db_name.sql \r" expect "root@*" send "zip db_dump_file.zip db_name.sql \r" expect "root@*" send "exit \r" eof echo done!