MySQL shell中的 shell 命令返回值:
mysql> \! echo 1
1
如何将此结果分配给 MySQL 变量?喜欢:
mysql> set @var = \! echo 1
1
-> ;
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法
问题是这SET
是一个服务器命令,它改变了服务器上保存的变量的状态;而system
(及其\!
简写)是一个客户端命令,它在客户端上派生一个进程。虽然客户端可以将分叉进程的退出代码传输到服务器以存储在用户变量中,但我认为 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