В настоящее время я разрабатываю плагин для компиляции кода Oracle в текстовом редакторе. Недавно разработчики SQL Developer добавили версию командной строки sqlcl. Проблема в том, что это приложение Java - и увольнение этого (jvm) каждый раз, когда мне нужно сделать компиляцию, может быть дорогостоящим - с некоторыми сообщениями об этом занимает ~ 20 секунд.
Одно из предложений, которое я видел, это использовать именованный канал, который, если я делаю это вручную, кажется, работает хорошо.
Терминал 1:
mkfifo sqlconsole
tail -f sqlconsole | /opt/sqlcl/bin/sql /nolog
Терминал 2:
echo "conn hr/hr@example.com/xe" > sqlconsole
И инструкции выполняются успешно.
Проблема с этим, однако, заключается в том, что в терминале 2 я не получаю никакого вывода из терминала 1 (который я хочу).
..
Я нашел это для чтения вывода из именованного канала, однако даже с этим вывод из [ f10] не перенаправляется (и, как пишет это, кажется, сломанный вход)
#!/bin/bash
#consolereader.sh
trap "rm -f sqlconsole" EXIT
if [[ ! -p sqlconsole ]]; then
echo "pipe does not exist" >&2
exit 1
fi
while true
do
if read line < sqlconsole; then
if [[ "$line" == 'quit' ]]; then
break
fi
echo $line
fi
done
Клемма 1:
mkfifo sqlconsole
tail -f sqlconsole | /opt/sqlcl/bin/sql /nolog
Клемма 2: [!d13 ]
./consolereader.sh &
echo "conn hr/hr@example.com/xe" > sqlconsole
Есть ли лучший подход, который я могу принять, чтобы я мог оставить sqlcl в фоновом режиме и все еще получать вывод в сеанс Я посылаю команды из
..
Изменить: Попытка решения Жерма:
setUpPipes.sh (вывод 1):
#!/bin/bash
rm -f sqlconsole
rm -f sqlconsole_out
mkfifo sqlconsole
mkfifo sqlconsole_out
tail -f sqlconsole | /opt/sqlcl/bin/sql /nolog | tee -a sqlconsole_out
compileOracle.sh (терминал 2):
#!/bin/bash
echo "begin.."
tail -f /home/trent/pipedemo/sqlconsole_out &
echo "about to run connection"
echo "conn hr/hr@example.com/xe" > /home/trent/pipedemo/sqlconsole
echo "select * from dual" > /home/trent/pipedemo/sqlconsole
echo "disconnect" > /home/trent/pipedemo/sqlconsole
echo "finished"
exit 0