mariadb 如何将shell命令结果存储在sql的变量中?

vlf7wbxs  于 2023-02-04  发布在  Shell
关注(0)|答案(3)|浏览(134)

我的系统是Ubuntu 16.04,MariaDB版本是10.2.38。
我想从shell获得Ubuntu版本,并将结果保存在sql变量中。

MariaDB [(none)]> \! lsb_release -r;
Release:        16.04

我执行了下面的判决。

MariaDB [(none)]> set @ver = '\! lsb_release -r';
Query OK, 0 rows affected (0.00 sec)

但是@ver变量中存储的值让我很失望。

MariaDB [(none)]> select @ver;
+------------------+
| @ver             |
+------------------+
| ! lsb_release -r |
+------------------+
1 row in set (0.00 sec)

我想知道如何将值16.04保存到变量中。谢谢。

lf5gs5x2

lf5gs5x21#

\!是一个mariadb(和mysql)命令行扩展,用于执行shell命令进行维护,它将在客户端执行,而不是在服务器上执行,并且不能与SQL命令混合使用。
SQL不支持其他程序的执行--这个特性将是一个巨大的安全风险。
要将shell命令的输出存储在SQL变量中,可以在启动命令行客户端时使用--init_command选项:

$ mariadb --init-command="set @a:=right(\"`lsb_release -r`\",5)"
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3938
Server version: 10.10.3-MariaDB-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select @a;
+-------+
| @a    |
+-------+
| 20.04 |
+-------+
fnatzsnv

fnatzsnv2#

如果您使用的不是维护结束版本,其中MariaDB由上游打包,则在最后1-2个版本中,它最后存储在@@version中:

select RIGHT(@@version,4)

RIGHT(@@version,4)
2204
hfyxw5xn

hfyxw5xn3#

在POSIX shell级别回答:自lsb_release -r打印以来 * 版本:16.04* 在标准输出上,命令

lsb_release -r | cut -d " " -f 2

应仅打印 16.04

相关问题