.bash_aliases 中的函数不接受完整的命令字符串

Function in .bash_aliases not accepting full command string

我在.bash_aliases中有一个循环函数来帮助我快速监控某些命令。

loop()
{
 while sleep 1;
  do $@;
 done
}

但是,我无法使该命令起作用:

# loop mysql vb -e 'select count(*) from postparsed;'

# loop mysql vb -e "select count(*) from postparsed;"

# loop "mysql vb -e 'select count(*) from postparsed;'"

所有这些 return 一个 mysql 无效的命令行参数错误,因为没有将整个字符串传递给 mysql。

mysql Ver 15.1 Distrib 10.4.12-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Usage: mysql [OPTIONS] [database]

我也证实了这一点:

loop echo mysql vb -e 'select count(*) from postparsed;'

mysql vb -e select count(*) from postparsed;

mysql vb -e select count(*) from postparsed;

我觉得不错。

我错过了什么?为什么 loop() 函数没有正确处理我的 mysql 命令?

谢谢

shell 解释引号,因此脚本看不到您在命令行输入的内容。你需要的是

loop mysql vb -e 'select count(*) from postparsed;'

但与此同时,您需要更改脚本以将整个 SQL 命令保持为一个单词。只需双引号参数数组即可实现:

do "$@"