У меня есть сценарий удара, который несколько раз называет MySQL. Вместо того, чтобы иметь необходимость снова соединиться с MySQL, там способ сохранить соединение открытым? Идеально, соединение закрылось бы, если сценарий выходит рано. Я думаю, что именованные каналы работали бы, но они останутся открытыми.
Вот быстрый псевдопример того, что я надеюсь найти:
openMySQL
executeMySQL "SELECT 1"
exit 1
executeMySQL "SELECT 2"
Я ищу openMySQL
и executeMySQL
функции, где Подключение mysql на самом деле закроется во время exit 1
.
Насколько я понимаю, ваш вопрос: 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), как только будет создана текущая оболочка ...
У меня есть часть того, что я искал.
Держите соединение 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 и читать из другого?