在最近的一个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
答案 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