重定向标准输入和输出时出现问题

重定向标准输入和输出时出现问题

我想使用 来获取backup我的mysql数据。我有三个文件,逐行 mysqldump包含 mysql 的名称。我的脚本有这一行 -tables

mysqldump -h localhost -uroot --lock-tables=false db < $2 > ~/backup/$name'.sql'

我用getopts它来处理一些options。基本上$2就是我要提供的文件。这个文件有 - table1 和 table2。所以这个命令应该只备份这两个表。

但是当我cat打开文件时~/backup/name.sql,它显示了所有的备份db。我不确定它是所有 3 个文件的所有表的组合备份还是整个数据库的备份。但它正在备份整个数据库而不是两个表。

我究竟做错了什么?

当我这样说的时候,它工作得很好-

mysqldump -h localhost -uroot --lock-tables=false db table1 table2 >  ~/backup/$name'.sql'

答案1

失败的原因是 mysqldump 没有读取标准输入;table1 和 table2 是(可选)参数,但您不是在命令行上提供它们,而是在 stdin 上提供它们。

如果$2是包含一行文本的文件的文件名table1 table2,则以下操作应该有效:

mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql'

Bash 将会把这个命令行扩展为

mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > /home/user/backup/somename.sql

这正是您想要运行的。

但是,既然你正在使用 getopt,也许你可以把“table1”$2和“table2”放进去$3,然后运行

mysqldump -h localhost -uroot --lock-tables=false db $2 $3 > ~/backup/$name'.sql'

答案2

这有点取决于您如何运行脚本,但您应该能够使用反引号并 cat 文件。

mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql

相关内容