我可以不使用<在perl系统()或我错过了什么

时间:2014-09-15 11:31:54

标签: mysql perl

因此编写一个相对简单的脚本来翻阅某些日志文件,提取一些条目并生成一个sql脚本以将这些内容插入到数据库中。 到目前为止一切都很好,测试了提取文件,它看起来好像生成了,我可以在sql Workbench中打开它并执行它没有问题,我也可以从命令行使用mysql文件。但是,当我尝试在perl脚本的末尾使用系统时,似乎它正在跳过重定向,即mysql启动,并登录到数据库,但它不读取sql文件。

所以这是perl脚本的结尾

print "mysql --user=$dbuser --password=$dbpassword $database < $wdir/$foname";
system( "$mysql", "--user=$dbuser --password=$dbpassword $database < $wdir/$foname" );
if ( $? == -1 ) {
    print "\ncommand failed: $!\n";
    exit 2;
} else {
    $exend = time();
    $exend = $exend - $extime;
    printf "SQL Load: $exend s\n";
}

从脚本输出

> 1 file(s) will be translated to sql for DBFScalls
test.txt  test.sql  No Records: 50 mysql --user=###### --password=##### #### < /Users/ben/avaydev/test.sqlWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 229
Server version: 5.6.19 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果你使用多个arg到system,它会直接将列表传递给exec()而不使用shell

改变你的行

   system("$mysql --user=$dbuser --password=$dbpassword $database < $wdir/$foname");

因此只传递了一个字符串,它应该命中shell并正确使用<

dooh:正如Miguel Prz在评论中所说的那样。我应该阅读评论