我正在尝试将参数从bash脚本传递到mysql脚本。 bash脚本是
#!/bin/bash
for file in `ls *.symbol`
do
path=/home/qz/$file
script='/home/qz/sqls/load_eval.sql'
mysql -u qz -h compute-0-10 -pabc -e "set @pred = '$path'; source $script;"
done
load_eval.sql是
use biogrid;
load data local infile @pred into table lasp
fields terminated by ','
lines terminated by '\n'
(score, symbols);
运行bash脚本时,我收到错误消息:
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 '@pred into table lasp ..
似乎参数@pred的值没有传递给mysql脚本。
答案 0 :(得分:1)
MySQL不支持LOAD DATA INFILE语句中的会话变量。这已经被认为是很长一段时间的功能请求(http://bugs.mysql.com/bug.php?id=39115),但该功能从未实现过。
我建议使用mysqlimport而不是使用您正在执行的mysql执行复杂的步骤。文件名必须与表的名称匹配,但您可以使用符号链接来欺骗它:
#!/bin/bash
for file in *.symbol
do
path="/home/qz/$file"
ln -s -f "$path" /tmp/lasp.txt
mysqlimport -u qz -h compute-0-10 -pabc \
--local --columns "score,symbols" /tmp/lasp.txt
done
rm -f /tmp/lasp.txt
PS:不需要使用`ls`。如您所见,文件名扩展正常。