因此编写一个相对简单的脚本来翻阅某些日志文件,提取一些条目并生成一个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>
有什么建议吗?
答案 0 :(得分:3)
如果你使用多个arg到system
,它会直接将列表传递给exec()而不使用shell
改变你的行
system("$mysql --user=$dbuser --password=$dbpassword $database < $wdir/$foname");
因此只传递了一个字符串,它应该命中shell并正确使用<