Opa Julio!
Eu tinha tentado usar somente o "<(comando)" mas o nc recebe o pipe do
process substitution como argumento e não espera isto. Já usando o "<
<(comando)" ele entente que estou jogando o pipe na STDIN.. e tudo funciona
ok!
Depois que isto comecou a funcionar eu compliquei um pouco mais as coisas e
ficou assim:
---------------------------------------------------------------------------------------------
#!/bin/bash
PIPE=server.fifo
[ ! -e "${PIPE}" ] && mkfifo "${PIPE}"
[ -e "${PIPE}" -a ! -p ${PIPE} ] && echo "Error. Cannot create named pipe." &&
exit 1
while [ true ]; do
nc -l 12345 < \
<(
while [ true ]; do
ANSWER=`cat "${PIPE}"`;
if [ "${ANSWER}" != "BYE" ]; then
echo ${ANSWER}
else
echo ${ANSWER}
sleep 1
exit
fi
done
) |
while read line; do
echo "Line is: ${line}"
if [ "${line}" = "quit" ]; then echo "BYE" > ${PIPE}; exit
else echo "OK. Go on." > ${PIPE}; fi
done
echo "End of connection."
done
[ -p "${PIPE}" ] && unlink "${PIPE}"
---------------------------------------------------------------------------------------------
E deste modo eu consigo fazer com que o script processe o que foi digitado
e de uma resposta, prevendo a desconexão solicitada ou involuntária. A unica
coisa "ruim" é que o script só atende um cliente por vez... :-)
Abraços,
--
0010111100101010010100110100100101000111
Fernando LEMES da Silva
www.koho.com.br (0x53E56DAA)
0101001101001001010001110010101000101111
Em Quinta 11 Janeiro 2007 16:58, Julio C. Neves escreveu:
> Fala Fernando,
> qdo vc disse que não conseguiu por causa do pipe, eu is sugerir justamente
> o que vc fez, o uso de process substitution. Vc tb pode fazer uma
> substituição de processos do conjunto inteiro redirecionando a entrada do
> done.
> Mas tem 2 coisas estranhas:
> 1. Me parece que o correto é:
> nc -l 12345 <(cat "named_pipe")
> e não:
> nc -l 12345 < <(cat "named_pipe")
> já que o nc não aceita redirecionamento de entrada.
> 2. Se vc faz cat named_pipe e no loop vc faz echo ok > named_pipe, o
> arquivo named_pipe seria zerado, ficando somente a palavra ok lá.
> Abração,
> Julio
> :wq