Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何编写bash函数来包装另一个命令?_Mysql_Bash_Function - Fatal编程技术网

Mysql 如何编写bash函数来包装另一个命令?

Mysql 如何编写bash函数来包装另一个命令?,mysql,bash,function,Mysql,Bash,Function,我正在尝试为mysql命令编写函数包装器 如果pwd中存在.my.cnf,我想自动将--defaults file=.my.cnf附加到命令 这就是我要尝试的 function mysql { if [ -e ".my.cnf" ]; then /usr/local/bin/mysql --defaults-file=.my.cnf "$@" else /usr/local/bin/mysql "$@" fi } 我的想法是,我希望能够像以前一样使用mysql命令,

我正在尝试为
mysql
命令编写函数包装器

如果pwd中存在
.my.cnf
,我想自动将
--defaults file=.my.cnf
附加到命令

这就是我要尝试的

function mysql {
  if [ -e ".my.cnf" ]; then
    /usr/local/bin/mysql --defaults-file=.my.cnf "$@"
  else
    /usr/local/bin/mysql "$@"
  fi
}
我的想法是,我希望能够像以前一样使用
mysql
命令,只有当
.my.cnf
文件存在时,才将其作为参数附加

问题:这种方法会不会给我带来麻烦?有更好的方法吗


如果我手动指定
--defaults file=foo.cnf
,那么应该使用它,而不是
.my.cnf

您编写的函数非常好。这是一个触摸式干燥机:

function mysql {
    if [ -e ".my.cnf" ]; then
        set -- --defaults-file=.my.cnf "$@"
    fi
    /usr/local/bin/mysql "$@"
}
set
命令将my.cnf参数放在命令行参数的开头

仅当选项不存在时:

function mysql {
    if [[ -e ".my.cnf" && "$*" != *"--defaults-file"* ]]; then
        set -- --defaults-file=.my.cnf "$@"
    fi
    /usr/local/bin/mysql "$@"
}

您应该使用
“$@”
。如果函数的参数中已经存在
--defaults file
,会发生什么情况?如果mysql得到两次该怎么办?我想它可能使用了命令行上的最后一个。在这种情况下,你希望赢得哪一个论点?您的文件或参数中的文件?@EtanReisner,如果指定了
--defaults file
,则应使用它。我如何适应这种情况?如果尚未指定,是否可以只附加
--defaults file=.my.cnf
?您可以通过
$@
循环查看参数是否匹配,但更好的问题是您是否需要麻烦。正如我在评论中所说,如果mysql多次接受该参数,并且总是使用它得到的最后一个参数,那么您就不必做更多的事情了。如果您正在检查
--defaults file
是否已被使用,请记住
=
是可选的,并且可能不会在原始调用中使用。@chepner,已容纳。
mysql
如果设置了两个
--默认文件
标志,则会投诉。我将if条件的第二部分更新为
“$*”!=*“--默认文件”*
以解决此问题。与专门检查
--deftauls file=.my.cnf
不同,这与
--defaults file=where.cnf
或用户选择的任何文件相匹配。