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