0

bash スクリプトから mysql スクリプトにパラメーターを渡そうとしています。バッシュスクリプトは

#!/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 )、この機能は実装されていません。

あなたがやっているmysqlで複雑な手順を実行する代わりに、mysqlimportを使用することをお勧めします。ファイルの名前はテーブルの名前と一致する必要がありますが、シンボリック リンクでこれをだますことができます。

#!/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 に答える