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

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

Re: [shell-script] Guardar variavel entre chamada de funções


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Guardar variavel entre chamada de funções
Date: Thu, 8 Nov 2007 16:02:55 -0200

Miguel.

Shell é uma interface entre tu e os programas que por ventura precises
executar em um determinado sistema operacional (no nosso caso, um
linux ou bsd).

As variaveis de ambiente funcionam no shell de forma diferente de
outras linguagens de programação. Além de vc se preocupar com o escopo
das variaveis (escopo local e global) vc tem uma limitação no que diz
respeito aos sub-shells.

Exemplo classico

A=1
echo xxx | while read A ; do echo $A ; done
echo $A

o que será impresso por ultimo? Se vc respondeu xxx, está enganado.

Vejamos outro exemplo:

export A=1
echo xxx | while read B ; do echo $A ; A=$B ; echo $A ; done
echo $A

o que será impresso por ultimo?

Bom, o que eu quero dizer com isso é o seguinte: as variaveis em shell
só são visiveis no máximo em um sentido: um shell filho PODE ver as
variaveis de um shell pai, porém só pode altera-las no seu proprio
contexto.

Quando utilizamos o pipe | , tudo depois dele é executado em um
processo filho. no ultimo exemplo eu exportei A, assim o subshell pode
"ver" a variavel A, porém não pode aterar o valor de A no shell pai.
Isso é um recurso de segurança: imagine um script que fosse capaz de
alterar o seu PATH ?

Nesses casos, se vc precisa atualizar uma variavel a partir de um sub
processo, vc pode usar 2 artificios:

se o sub processo for um script, use o comando source ou .

no seu caso seria

. ./teste.sh  # percebeu o ponto antes?

outro artificio é utilizar algum arquivo ou named pipe para resgatar a
informação que vc quer.

On 11/8/07, miguelcm86 <address@hidden> wrote:
>
> Olá pessoal
>
> É o seguinte, não estou a conseguir guardar uma variavel ao sair de
> uma função.. exemplo
>
> script.sh
>
> echo "este script chama o teste.sh"
> ./teste.sh
> echo "variável tem o valor de $olá"
>
> exit 0
>
> teste.sh
>
> export olá=23
>
> exit 0
>
> isso aí em cima é um exemplo o programa na realidade é muito mais
> complexo.
>
> não percebo porquê não funciona, tb já tentei por o export dentro de
> teste.sh e alocar antes de chamar a função, mas sempre que retoma a
> teste.sh perde o valor.
>
> Eu não posso usar a opcção exit para enviar o valor, pois ela já está
> sendo usada para outras coisas.
>
> Obrigado ;)

-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/
"what does not kill us makes us stronger"


reply via email to

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