2010/8/21 Cristiano <boxferr...@gmail.com>
> Senhores, bom dia.
>
> Estou otimizando um script de firewall e tenho um arquivo que descreve 
> serviços e portas.
>
> Seu conteúdo é +- assim:
>
> BACULA_DIR;9101;tcp udp
> BACULA_FD;9102;tcp udp
> BACULA_SD;9103;tcp udp
> DNS;53;tcp udp
> FIREBIRD;3050;tcp
> FTP;20:21;tcp
> GMAIL_POP;995;tcp
>
> A ideia é criar uma função que receba como parâmetro o nome do serviço (campo 
> 1) e que retorne a porta (campo 2) e os protocolos (campo 3), atribuídos 
> respectivamente à variáveis PORTA e PROTOS.
>
> Porém, a atribuição da variável feita dentro da função não é exportada para o 
> shell que a chamou.
>
> Como eu faço para usar estas variáveis, atribuídas dentro da função, fora 
> delas. Exemplo:
>
> function GetService () {
> PORTA=$(grep '^'${1}';' /etc/firewall/services.conf | cut -f 2 -d ';')
> PROTOS=$(grep '^'${1}';' /etc/firewall/services.conf | cut -f 3 -d ';')
> }
>
> # (...)
>
> GetService "DNS"
>
> for PROTO in $(echo $PROTOS) ; do
> iptables -A FORWARD -p $PROTO --dport $PORTA -i $IF_IN -j DROP
> done
>
> Sei que a dúvida conceitual é bem básica; até meio besta, mas me deu um 
> branco.

Cristiano, faz tempo que não "boto a mão na massa" e por isso já
esqueci quase tudo. Então o que vou falar pode estar errado, mas veio
de algum canto da memória, não sei por qual motivo.

Assumindo que essa função está dentro de um script, e se compreendi
seu problema, experimente executá-lo da seguinte forma:

$ . ./Seu_Script

E depois veja se a variável está disponível...

Desculpe o "mal jeito" na resposta, mas estou sem lugar para testar.
É só um tiro contra um alvo móvel, dado no escuro, com arma
descalibrada e por quem não lembra mais como atirar.

Abraço,

Gentil

Responder a