0

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

4

1 回答 1

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`。正如您在上面看到的,文件名扩展工作正常。

于 2013-08-22T00:53:19.947 回答