EDUARDO ANTONIO RAGA LUCCAS escreveu em 11-01-2008 12:37:

> SÓ QUE, ai vem a minha dúvida, quando sai do comando e volta pro prompt
> ele volta no diretório onde eu estava quando eu dei o comando. OK. Mas,
> como eu faço para que, ao sair do comando, ele fique no diretório que eu
> especifiquei DENTRO do script e NÃO no diretório que eu estava ao
> executar o comando ?
> 
> Nesse exemplo, ao sair do script, eu quero que o prompt caia no
> /usr/local/etc e não no diretório no qual eu executei o script (estou
> considerando, claro, que o script está em um diretório no $PATH).
> 
> Já tentei deixar como último comando um  cd /usr/local/etc mas não
> funcionou.
> 
> Tem como fazer isso ?

Tem.

Simplesmente rodando o script nao funciona, pq ao executa-lo, eh criada 
uma nova instancia do shell, que tem estado transparente, ou seja, 
quando eh invocada, faz e acontece, mas ao ser deixada, encontra tudo no 
estado inicial. Isso vale para variaveis criadas, paths alterados, e 
algumas outras coisas :-p feitas nesse sub-shell.

A solucao eh executar o script como se os comandos dele tivessem sido 
digitados a mao, no shell atual, ou seja, sem criar um sub-shell. Como?

Usando o comando 'source' (.):

        source script
        . script

Uma aplicacao bem pratica, util e interessante: re-inicializar uma 
sessao interativa do shell, sem precisar fazer logout e login novamente:

        . /etc/profile
        . ~/.profile

Mas cuidado: scripts 'sourcered' podem funcionar de forma indesejada. 
Copie e cole os seguintes comandos:

cat << EOT >| teste.sh
#!/bin/sh

echo "Script de teste"

if [ "\$1" = "-h" ]
then
   echo "Isso eh um help :-p"
   exit
fi

echo "Fim do script"
EOT


chmod +x teste.sh


./teste.sh
Script de teste
Fim do script


./teste.sh -h
Script de teste
Isso eh um help :-p


. teste.sh
Script de teste
Fim do script


. teste.sh -h
...

hehe

Entao, cuidado e boas scriptadas.

[]

-- 
------------------------    __o    [EMAIL PROTECTED]  ----.-----------
  [EMAIL PROTECTED] Roberto Bagatini   _`\<,    www.ceat.net/~arkanon  \
   -=---=---==---=---=-   (_)/(_)   Phone +55 51 3748 7000  `--------
  Lajeado - RS - Brasil  ---------  ICQ 34 789 30 - LinuxUser 102.514
---------------------------------------------------------------------
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a