shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Netcat bidirecional.


From: Fernando Lemes da Silva
Subject: Re: [shell-script] Netcat bidirecional.
Date: Thu, 11 Jan 2007 19:31:32 -0200
User-agent: KMail/1.9.1

   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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]