Как сохранить подключение mysql открытым в Bash

У меня есть сценарий удара, который несколько раз называет MySQL. Вместо того, чтобы иметь необходимость снова соединиться с MySQL, там способ сохранить соединение открытым? Идеально, соединение закрылось бы, если сценарий выходит рано. Я думаю, что именованные каналы работали бы, но они останутся открытыми.

Вот быстрый псевдопример того, что я надеюсь найти:


openMySQL
executeMySQL "SELECT 1"
exit 1
executeMySQL "SELECT 2"

Я ищу openMySQL и executeMySQL функции, где Подключение mysql на самом деле закроется во время exit 1.

7
задан User1 11 August 2010 в 21:45
поделиться

2 ответа

Насколько я понимаю, ваш вопрос: coproc , доступный в zsh / ksh, а также bash v4 + может быть похож на то, что вы имеете в виду, например

bash4-4.1$ coproc MYSQL mysql -B -uroot 
[1] 10603
bash4-4.1$ jobs
[1]+  Running                 coproc COPROC MYSQL mysql -B -uroot &
bash4-4.1$ echo 'show databases;' | MYSQL
Database
information_schema
...

Команда продолжает работать в фоновом режиме, ее stdin / stdout доступен, она завершится (в результате закрытие стандартного ввода / EOF ing), как только будет создана текущая оболочка ...

5
ответ дан 6 December 2019 в 12:45
поделиться

У меня есть часть того, что я искал.

Держите соединение mysql открытым, используя fd = 3 для записи:


exec 3> >(mysql)
echo "SELECT 1;" >&3
echo "SELECT 2;" >&3
exec 3>&-

Сохраняйте соединение mysql открытым, используя fd = 3 для чтения:


exec 3< <(echo "SELECT 1;SELECT 2;"|mysql|sed '1d')
while read <&3
do
  echo $REPLY
done

Примечание: sed '1d' удаляет заголовок.

Есть ли способ объединить их, чтобы можно было писать в один fd и читать из другого?

7
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: