Перенаправление вывода из консольного приложения Oracle в именованном канале

В настоящее время я разрабатываю плагин для компиляции кода 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

1
задан 27 November 2015 в 02:48

0 ответов

Другие вопросы по тегам:

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