我不熟悉linux shell脚本。我在bashrc文件中创建了一个函数sel1。
function sel1(){
echo "select * from table limit 1;"
}
当从bash调用此函数时,该函数按预期工作
akshayk@AKSHAY-PC:/$ sel1
select * from table limit 1;
我还发现,我们可以在mysql连接之后运行bash命令,比如下面的ls命令
mysql> \! ls
acct bin boot cache data dev etc home init lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
但是当我从mysql调用函数时,它说找不到
mysql> \! sel1
sh: 1: sel1: not found - What could be the problem here ?
还有一种方法可以在光标位置获取函数的输出吗?
为了测试这一点,我在windows10上使用了ubuntubash。我计划运行这些命令的系统正在运行centos。
谢谢你的帮助。
2条答案
按热度按时间suzh9iv81#
nic3500做得很好,但是让我补充一点,shell是进程,函数没有导出到子进程。当你定义
sel1
函数,你在父shell中。你启动了mysql,进程2并尝试运行sel1
通过跑步\!
,产生过程3。您可以通过查看shell进程id、启动mysql并再次查看进程id来看到这一点。我试了一下,得到了:
如果您有一个复杂的函数,则需要运行定义该函数的脚本,然后在同一个脚本中调用该函数
\!
调用。至于将函数输出发送到游标位置,我认为您希望运行一个脚本,该脚本在sql提示下生成一个select。为此,我认为最好的办法是使用shell生成一个脚本,然后批处理。
3b6akqbq2#
ls
实际上是/bin/ls
,一个可执行文件,并在path变量中定义。mysql不运行.bashrc
文件,所以它不知道这个函数。将函数修改为脚本,并确保其路径包含在path变量中。
例如:文件
/home/youruser/sel1
,具有可执行权限:将“/home/youruser”放入path变量中。然后你就可以运行它了。