mysql - 执行动态mysql查询失败

标签 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 语句;在命令行上执行评估的命令没有错误。但是,当将文件传递给函数时,例如:

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 用法

最佳答案

您不能放置像 < 这样的 shell 元字符内部变量并让它们发挥作用。

解析器不是这样工作的。 shell看不到<在变量 result 中作为重定向运算符,它将其视为文字字符串。

这是 Bash FAQ 050 的一部分覆盖。

关于mysql - 执行动态mysql查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812212/

相关文章:

mysql - Hibernate 方案命名因操作系统而异

mysql - SQL查询将一列的组结果带入多个列

regex - sed 在 Linux 中替换 ASCII 字符

bash - 在 bash、csh 和 zsh 之间有共同的别名文件

file - 如何使用 Bash 将大量字符串快速输入到文件中

linux - 如何在 Linux 中处理具有固定宽度列的文件

ruby - 检测 USB 设备连接/分离并发送电子邮件

mysql - 使用 MySQL 的关系模式

mysql - 将数据库的第一个实例导出到第二个实例

php - 使用 PHP 在 sql 查询中传递字符串数组