fique atento

$ cat xxx
 #!/bin/bash
 echo SHLVL = $SHLVL
 echo antes  = $TESTE
 TESTE=lala
 echo depois = $TESTE

$ export TESTE=limao

$ ./xxx
SHLVL = 2
antes = limao
depois = lala

$ echo $TESTE
limao

$ . ./xxx # usando o comando source ou .
SHLVL = 1
antes = limao
depois = lala

Ou seja, vc não consegue alterar a sua variavel no shell pai por que
vc executa o script no shell filho, as variaveis só vão, não voltam.

uma boa explicação esta aqui
http://www.meleuzord.hpg.ig.com.br/textos/bashscripting.txt

--> SHLVL

   Esta variável armazena quantos shells você executou a partir da
primeira shell.
   Confuso? Vamos a um exemplo.
   Imagine que você está usando o bash e executou o bash de novo, nesta
situação o seu SHLVL vale 2. Veja isto:

/* -=-=-= exemplo =-=-=- */
$ echo $SHLVL
1
$ bash          # estou executando o bash a partir do bash
$ echo $SHLVL
2
$ exit          # saí do segundo bash
exit
$ echo $SHLVL
1
/* -=-=-= exemplo =-=-=- */

   Quando você inicializa scripts a partir do comando "source" o script é
executado no shell pai, portanto se tiver um "exit" no script você vai
executar um logoff. É aí que está a utilidade da variável SHLVL. Quando
você está no shell primário o valor de SHLVL é 1. Então você pode, através
de um "if" por exemplo, executar o "exit" só se SHLVL for diferente de 1
(mais informações sobre o source em "6.1 Funções como comandos").

Pratique um pouco diferentes usos e formas de setar variaveis e abrir
sub-shells, é bom pra praticar este conceito (q as vezes atrapalha
quando a gente não se dá conta dos detalhes).

On 2/2/07, luiz henrique campos <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
>
> Olá grupo,
>  sou novato no grupo e estou com uma duvida em uma questão que olhei no 
> selfteste:
>
>  se eu dê o comando "export TESTE=snuff" e apos isso criar um script da 
> seguinte forma:
>  #!/bin/bash
>  USER=testeking
>  TESTE=$USER
>
>  porque
>  apos executar esse script a variavel $TESTE continua com o valor "nuff"
>  ?????? Sendo que se eu nao usar o script e da o seguinte comando
>  TESTE=snuff2 (direto, sem exportar), a variavel vai pegar o resultado
>  "snuff2".
>  Por que isso acontece??
>
>  __________________________________________________
>  Fale com seus amigos  de graça com o novo Yahoo! Messenger
>  http://br.messenger.yahoo.com/
>                    



-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer

Responder a