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