2015-11-13 3 views
0

У меня есть следующий сценарий Баша, который обертывание ожидать сценарий (в виде здесь документ):стандартный вывод поток перенаправлять в ожидает сценарии

#!/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 является виновником - скрипт работает после удаления этого перенаправления.

Так что мне интересно: как использовать перенаправление потоков в сценариях ожидания?

+0

Смотрите, если мой ответ на [другой подобный вопрос] (http://stackoverflow.com/questions/31236483/how-to-create-a-mysql- database-from-dump-file-in-expect-tcl-script/31236758). – pynexj

ответ

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