我有以下bash脚本包装了一个expect脚本(在这里 - 文档形式):
#!/bin/bash
PASSWORD_MYSQL_ROOT=root
expect <<- DONE
set timeout -1
spawn mysqldump --all-databases --user=root --password --protocol=TCP --host=localhost --verbose > somebackupfile.sql
expect "*?asswor?:*"
send -- "$PASSWORD_MYSQL_ROOT\r"
expect eof
DONE
当我执行此脚本时,我得到以下输出:
spawn mysqldump --all-databases --user=root --password --protocol=TCP --host=localhost --verbose > somebackupfile.sql
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
send: spawn id exp4 not open
while executing
"send -- "root\r""
所以有些事情没有成功。
经过一些尝试和错误后,我发现stdout流重定向> somebackupfile.sql
是罪魁祸首 - 一旦删除此重定向,脚本就会正常工作。
所以我想知道:如何在expect脚本中使用流重定向?
答案 0 :(得分:0)
未经测试,但这应该有效:
expect <<- DONE
set timeout -1
spawn mysqldump --all-databases --user=root --password --protocol=TCP --host=localhost --verbose
expect "*?asswor?:*"
send -- "$PASSWORD_MYSQL_ROOT\r"
log_file somebackupfile.sql
expect eof
DONE