![](/img/trans.png)
[英]Is it possible to redirect stdout to a non-stderr stream inside a shell script?
[英]stdout stream redirect in expect scripts
我有以下bash脚本,其中包装了一个期望脚本(此处文档形式):
#!/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 <<- 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.