期望脚本中的stdout流重定向

时间:2015-11-13 14:09:27

标签: bash redirect expect

我有以下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脚本中使用流重定向?

1 个答案:

答案 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
相关问题