mysql - 如何将 shell 命令的结果分配给 MySQL 变量?

标签 mysql shell variables

MySQL shell 中的 Shell 命令返回值:

mysql> \! echo 1
1

如何将这个结果赋值给MySQL变量?喜欢:

mysql> set @var = \! echo 1
1
    -> ;

错误 1064 (42000):您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 '' 附近使用的正确语法

最佳答案

问题是 SET 是一个服务器命令,它改变服务器上保存的变量的状态;而 system(及其 \! 简写)是一个客户端命令,它在客户端上派生一个进程。虽然客户端可以将 fork 进程的退出代码传输到服务器以存储在用户变量中,但我认为 MySQL 命令行客户端不提供此功能。

来自 mysql-5.5.29/client/mysql.cc :

3958: static int
3959: com_shell(String *buffer __attribute__((unused)),
3960:           char *line __attribute__((unused)))
3961: {
3962:   char *shell_cmd;
3963: 
3964:   /* Skip space from line begin */
3965:   while (my_isspace(charset_info, *line))
3966:     line++;
3967:   if (!(shell_cmd = strchr(line, ' ')))
3968:   {
3969:     put_info("Usage: \\! shell-command", INFO_ERROR);
3970:     return -1;
3971:   }
3972:   /*
3973:     The output of the shell command does not
3974:     get directed to the pager or the outfile
3975:   */
3976:   if (system(shell_cmd) == -1)
3977:   {
3978:     put_info(strerror(errno), INFO_ERROR, errno);
3979:     return -1;
3980:   }
3981:   return 0;
3982: }

请特别注意 system(3) 调用的返回值没有存储在任何地方;但是,如果进程以该代码退出,则 com_shell() 函数调用将返回 -1

关于mysql - 如何将 shell 命令的结果分配给 MySQL 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14397393/

相关文章:

mysql - 首先是特定的 Id

php - 使用 FPDF 自动调整单元格宽度和文本宽度

mysql - 生成等于表中行数的数字列表

Java:带重定向的 Shell 命令

bash - 将 stdout 和 stderr 管道传输到 shell 脚本中的两个不同进程?

java - 将整数参数复制到数组元素中

c++ - 奇怪的数据类型问题

php - 重定向后丢失 session 变量

php - 从 PHP 页面即时更新 MySQL - AJAX?

swift - 在 Swift 5 中正确执行 shell 命令