Пользовательская функция Linux Bash не найдена при запуске из mysql - PullRequest
0 голосов
/ 04 ноября 2018

Я новичок в сценариях оболочки Linux. Я создал функцию sel1 в файле bashrc.

function sel1(){
        echo "select * from table limit 1;"
}

Эта функция работает, как и ожидалось, при вызове из bash, я получаю этот вывод

akshayk@AKSHAY-PC:/$ sel1
select * from table limit 1;

Также я обнаружил, что мы можем запускать команды bash после подключения mysql, как показано ниже: ls command

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 ?

Также есть способ получить выходные данные функции в месте курсора ?

Для тестирования я использую Ubuntu Bash на Windows 10. Система, где я планирую выполнить эти команды, работает CentOS.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Nic3500 проделал довольно хорошую работу, но позвольте мне добавить, что оболочки - это процессы, а функции не экспортируются в подпроцессы. Когда вы определили функцию sel1, вы были в родительской оболочке. Вы запустили MySQL, процесс 2 и попытались запустить sel1, запустив \!, который производит процесс 3.

Это можно увидеть, просмотрев идентификатор процесса оболочки, запустив MySQL и снова просмотрев идентификатор процесса. Я просто попробовал это и получил:

$ bash
$ function sel1 {
>     echo "select * from table limit 1;"
> }
$ sel1
select * from table limit 1;
$ export sel1
$ bash
$ sel1
bash: sel1: command not found

Если у вас сложная функция, вам нужно будет запустить сценарий, который определяет функцию, а затем вызвать функцию в том же \! вызове.

Что касается отправки вывода функции в местоположение курсора, я полагаю, что вы хотите запустить скрипт, который, скажем, производит выбор в приглашении sql. Для этого, я думаю, вам лучше всего использовать оболочку для создания сценария, который вы затем запустите.

0 голосов
/ 05 ноября 2018

ls на самом деле /bin/ls, является исполняемым файлом и определен в вашей переменной PATH. MySQL не запускает ваш файл .bashrc, поэтому эта функция ему неизвестна.

Измените вашу функцию в сценарий и убедитесь, что ее путь включен в переменную PATH.

Пример: файл /home/youruser/sel1, с правами на выполнение:

#!/bin/bash 
echo "select * from table limit 1;"

Поместите "/ home / youruser" в переменную PATH. Тогда вы сможете запустить его.

...