LINUX.ORG.RU

Работа с pipe-ами


0

1

Добрый день! Не подскажете, как правильно работать с pipe-ми. Хотелось бы, чтобы значение, вводимое пользователем, перенаправлялось в pipe, затем читалось в переменную и выводилось на экран. Пробовала по-разному, обычно скрипт или зависает на приглашении для ввода значения (то есть можно вводить что угодно,но ничего не происходит) или вообще выдает ошибку.

#!/bin/bash rm -f /usr/local/out.pipe pipe=/usr/local/out.pipe mkfifo «$pipe» echo -n «Input value\\n» read «$pipe»<&0 read a < $pipe echo $a Скрипт выдает:

./script.sh Input value

1 ./script.sh: line 6: read: `/usr/local/out.pipe': not a valid identifier Заранее большое спасибо!


Ответ на: комментарий от anonymous

Вообще есть мысль,чтобы rpm, читал не из стандартного ввода,а из pipe. А в pipe со stdin помещал скрипт. Но , если скрипт будет писать в pipe через read to_pipe (echo $to_pipe > $pipe)& боюсь в rpm сработает. Сейчас я использую скрипт:

 #!/bin/bash
rm -f /usr/local/out.pipe
pipe=/usr/local/out.pipe
mkfifo $pipe
echo -e "Input value\\n"
installation \\n 3 - for SormDecoder installat
read c
(echo $c > $pipe) & а в секции %post :
%post
cd /usr/local
pipe=/usr/local/out.pipe
./script.sh
read from_pipe > $pipe
echo Read from pipe:$from_pipe
Пробуюустанавливать собранный пакет: rpm -Uhf Cluster-2.6-1.x86_64.rpm ########################################### [100%] /var/tmp/rpm-tmp.uoJD1D: line 10: $pipe: ambiguous redirect Read from pipe: ########################################### [100%] Input value

1 ^Cerror: %post(Cluster-2.6-1.x86_64) scriptlet failed, signal 2

Masha
() автор топика
Ответ на: комментарий от Masha

Предлагает ввести значение Input value: и подвисает (Я ввожу 1)

Masha
() автор топика
Ответ на: комментарий от Masha

не из стандартного ввода,а из pipe.
read from_pipe > $pipe

У вас тут запись.

Вот пример:

#!/bin/bash

pipe=out.pipe
mkfifo "$pipe"

read -p "Input value: " input
echo "$input" > "$pipe" &

# %post
read from_pipe < "$pipe"
echo "Read from pipe: $from_pipe"

wait

Только как вы потом «А в pipe со stdin помещал скрипт.», то есть внешню часть для %pre собираетесь осуществлять?

anonymous
()
Ответ на: комментарий от anonymous

Извините, за неточность. Сейчас у меня есть только секция %post (в которой , как мне хотелось бы в зависимости от того, какой режим выбрал пользователь, производятся определенные действия). %post

cd /usr/local
pipe=/usr/local/out.pipe
./script.sh
read from_pipe < $pipe
echo Read from pipe:$from_pipe
wait

В секции %post значение переменной получаем из pipe. В pipe пишет скрипт ./script.sh

 #!/bin/bash
rm -f /usr/local/out.pipe
pipe=/usr/local/out.pipe
mkfifo $pipe
read -p "Input value:" input
echo "$input" > $pipe &

Пробую установить пакет и не получаю желаемого результата. rpm -Uhf Cluster-2.6-1.x86_64.rpm ########################################### [100%] /var/tmp/rpm-tmp.Dlc4cs: line 10: $pipe: ambiguous redirect Read from pipe: ########################################### [100%] Read from pipe:

Masha
() автор топика
Ответ на: комментарий от Masha

Может быть,действительно, попробовать другой вариант:при первой попытке установки пакета сообщать пользователю о том,какие параметры поддерживаются при установке. А затем обработывать установку rpm с указанными параметрами. Не подскажете, как это можно реализовать?rpm можно устанавливать со своими специфичными параметрами?

Masha
() автор топика
Ответ на: комментарий от Masha

./script.sh

Это же самообман. Вы вызываете script.sh из %post, таким образом read в script.sh ничем не отличается от read в %post. Могло бы сработать, если бы сначала был запущен script.sh, а _затем_ произведена установка - но это фактически и есть обертка, упомянутая выше.

Допустим, пользователь устанавливает пакет с помощью графического менеджера, как быть в этом случае?

Предлагаю рассмотреть вариант с флагом первого запуска: если флаг установлен - при запуске предлагается выбрать режим и флаг сбрасывается (например записью first-run = no в конф. файл).

// wait сразу после ... & лишний - он ожидает завершения всех фоновых задач

anonymous
()
Ответ на: комментарий от tailgunner

Наполовину, впрочем, может оправдать невменяемое тз.

anonymous
()
Ответ на: комментарий от Masha

rpm можно устанавливать со своими специфичными параметрами?

Можно задать переменную окружения перед установкой, которую прочитает %post-hook, но такое рекомендовать никто не будет. Да и непонятно, что делать установки не из командной строки.

anonymous
()
Ответ на: комментарий от anonymous

Не могли бы Вы пояснить насчет флага первого запуска? „при запуске предлагается выбрать режим и флаг сбрасывается (например записью first-run = no в конф. файл).“ Вы имеете в виду при попытке установки?Тогда логика „предлагается выбрать режим“ должна быть заключена в rpm и это вновь сводится к чтению из stdin:(

Masha
() автор топика
Ответ на: комментарий от Masha

Кстати, насчет параметров rpm. http://www.opennet.ru/docs/RUS/rpm_guide/rpm_guide-linux.html.gz#113_html Не свсем понимаю. Вот в этом документе в секции 22.3.5 Скрипты стадий установки и удаления, как следует понимать приведенный пример:

%post 

/sbin/chkconfig --add ypbind 

%preun 

if [ "$1" = 0 ] ; then 

/sbin/service ypbind stop > /dev/null 2>&1 

/sbin/chkconfig --del ypbind 

fi 

exit 0 

%postun 

if [ "$1" -ge 1 ]; then 

/sbin/service ypbind condrestart > /dev/null 2>&1 

fi 

exit 0 
«$1» -это чей параметр???

Masha
() автор топика
Ответ на: комментарий от Masha

Вы имеете в виду при попытке установки?

Имелось ввиду первое использование программы (если, конечно, «использование» подразумевает запуск).

anonymous
()
Ответ на: комментарий от anonymous

Спасибо! Нет никакой программы,есть только один rpm-пакет.

Masha
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.