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

时间:2014-08-18 23:30:01

标签: 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命令 ,只有.my.cnf文件存在时,才能将其附加为一个论点

问题:这种方法会遇到什么问题吗?有没有更好的方法呢?

如果我手动指定--defaults-file=foo.cnf,则应使用该.my.cnf代替{{1}}。

1 个答案:

答案 0 :(得分:4)

你写的函数完全没问题。这是一个触摸DRYer:

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 "$@"
}