将参数从bash传递给mysql脚本

时间:2013-08-22 00:31:49

标签: mysql bash

我正在尝试将参数从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脚本。

1 个答案:

答案 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`。如您所见,文件名扩展正常。