mysql批处理文件中的Tee Command无法正常工作

时间:2013-12-11 12:51:25

标签: mysql linux shell

我正在使用名为data.sql的mysql批处理文件,其中包含以下数据

tee /var/lib/MYSQLBACKUP/info.txt;
USE APR_PHASE_II ;
INSERT INTO PRODUCTDETAILS (ITEM_CODE,ITEM_DESC) VALUES ('WT002','Water for Injection USP');
INSERT INTO PRODUCTDETAILS (ITEM_CODE,ITEM_DESC) VALUES ('WT003','Water for Injection USP');

当我使用下面的命令执行data.sql脚本时

mysql -u root -ppass < /var/lib/data.sql;

它会将数据插入到表PRODUCTDETAILS中,但是没有将执行输出存储到info.txt文件中,因为我们正在执行第一个tee命令到批处理文件中它应该将输出重定向到info.txt

如果我登录mysql命令提示符然后逐个执行批处理文件语句,它会将输出重定向到info.txt,有人可以指导我解决这个问题吗?

Mysql版本为5.1,OS为fedora 14。

1 个答案:

答案 0 :(得分:0)

批处理模式不会产生任何输出(参见&#34;查询OK,1行受影响&#34;在交互模式下),除非出现错误,因此无法看到。

然而,它会在第一个错误上停止并向STDERR写入消息 - 与在交互模式下使用source命令相反,后者一直在运行。

如果使用<重定向应用于mysql命令行客户端的批处理命中错误,则执行将停止,并且shell变量$?将包含非零值。它将包含&#39; 0&#39; 0成功。

可以使用STDERR重定向

2>流捕获到文件中
$ mysql < deliberate_error_in_here.sql 2>err.txt

控制台上没有显示任何内容,但退出状态变量设置为1。

$ echo $?
1

我命名的文件&#34; err.txt&#34;包含错误。

$ cat err.txt
ERROR 1064 (42000) at line 4: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near 'foo' 
at line 1

在Windows上,如果发生错误,您需要检查$?非零值,而不是%ERRORLEVEL%

这是否有用信息实际上取决于您尝试做什么。如果您只是使用批处理模式但实际上是手动执行此操作,那么使用tee然后使用source {filename}应用文件可能更接近您正在寻找的内容,因为它确实显示输出,但它没有显示正在执行的实际语句,因为你没有实际键入它(它只显示你使用source命令,然后是所有正常输出执行每个命令产生的结果)。