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
或用户选择的任何文件相匹配。