在最近的 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/