执行动态mysql查询失败

时间:2016-01-15 13:31:08

标签: mysql bash

在最近的一个bash脚本中,我需要一个函数来标准化对mysql服务器的调用。我的第一个版本的功能看起来像这样:

mysqlfunc()
{
    args="-A"
    if [ "$1" = "++" ]; then
        shift
        while [ 1 ]; do
            if [ "$1" = "--" ]; then
                shift
                break
            fi
            args="$args $1"
            shift  
        done
    fi

    query="-e \"$*\""
    if [ -f "$1" ]; then
        query="< $1"
    fi

    mysql $args -h<host> -p<password> -P<port> -u<user> <database> $query
}

这个版本的函数产生了一个语法正确的mysql语句;在命令行上执行evaluate命令可以正常工作。但是,将文件传递给函数时,例如:

mysqlfunc $DB_Scripts/mysql_table_create.sql

mysql命令会失败,抱怨看似提供的参数不正确或语法不正确。它没有指定哪个,只打印了mysql的使用帮助。

我的问题:为什么这个动态语句分配失败?

实施例

函数调用:

mysqlcmd $PATH_TO_FILE/example.sql

执行了Mysql命令:

mysql -A -h<host> -p<password> -P<port> -u<user> <database> < <path_to_file>/example.sql

结果:

用于打印到终端的mysql

2 个答案:

答案 0 :(得分:1)

您不能将public class User { public int number { get; set; } public string name { get; set; } public string surname { get; set; } } 之类的shell元字符放在变量中并让它们起作用。

这不是解析器的工作原理。 shell没有在变量result中看到var num = $this.val().replace(/,/gi, "").split("."), num2 = ""; if (num.length) { num[0] = num[0].split(/(?=(?:\d{3})+$)/).join(","); num2 = num.join("."); } 作为重定向运算符,它将其视为文字字符串。

这是Bash FAQ 050涵盖的内容的一部分。

答案 1 :(得分:0)

你可以做点什么吗

if [ -f "$1" ]; then
  cat $1 | mysql $args -h<host> -p<password> -P<port> -u<user> <database>
else
  mysql $args -h<host> -p<password> -P<port> -u<user> <database> $query
fi

适用于psql