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

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

Re: Script sai quando não devia


From: miguelcm86
Subject: Re: Script sai quando não devia
Date: Sat, 01 Dec 2007 03:18:55 -0000
User-agent: eGroups-EW/0.82

olá

o codigo continuava todo igual só tinha substituido a chamada de
scripts aplicando o source e no script que é chamado o exit 0 por
return 0.

Sim de facto neste caso não me interessa que ele verifique se deu erro
ou não, o que me interessa é que o aptitude instale e caso não instale
siga em frente como se não tivesse ocorrido nada, pois as aplicações
entre si são independentes.

o cd ../..
exit 0 é o final do script que citei acima, depois do case...,
desculpe não ter colocado o script completo no primeiro tópico, mas
isso é as ultimas duas linha que faltava lá.

Vou tentar agora testar sem aquele parênteses ( é assim que se chama
por cá :P ), porque tive na net á procura e todos s exemplos parecidos
não o tinham.

O que acho estranho é que se mudar a chamada de scripts e poser só
echo, ele já funciona bem, mas tb já tentei em vez de chamar scripts,
colocar logo o sudo aptitude..., só que ocorre o mesmo problema..

Obrigado pela ajuda, vou analisar a situação e testar, logo digo algo ;)
Abraços



--- Em address@hidden, "mop"
<mop2bky4mz5tyjwa8ersp7hrg5u9qn@...> escreveu
>
> Está certíssimo, quando ele sai do script adode.sh ele sai do case.
O case
> faz o que tiver na primeira entrada válida, nada mais. Se quiser
diferente
> terá de usar elif, ou outro esquema, mas eu não recomendo.
> 
> Por aquele script citado, agora ele já pode estar diferente, estava
tudo ok, 
> pois o case estava contido em um while ( nesse caso não precisa usar
> parenteses, não sei sé é assim que se denomina por aí :) e será chamado 
> sucessivamente até que as linhas da variável "escolhas" acabem e o
while 
> termine. Quem encerra o script é o while, não o case. A única
explicação para 
> um encerramento prematuro é a instrução exit, explícitamente
registrada ou 
> atomatizada com um "set -e" (exit ao primeiro erro).
> 
> O set -x mostrou isso. Aonde está aquele "cd ../.." seguido do "exit 0"?
> Foi ali que o script foi encerrado! Aliás vejo tudo cheio de zeros
para  
> voltas. Isso não é legal. Só deve ser feito em casos muuuuuuito
excepcionais. 
> Veja o return que eu deixei abaixo, se você não usar o subscript
como source já
> vai dar erro. Para que o return? Se alí é o fim do script. Ah mas e se o
> retorno não for zero? O script chamador é que tem que decidir o que
fazer ou
> se é para ignorar. O seu, pelo código, que olhei melhor agora, está
ignorando,
> o que é muito correto para o que quer fazer. Apenas o usuário deve ficar
> ciente de falhas, mas o resto da instalação deveria continuar, acho.
> 
> Eu, em alguns casos costumo checar um parâmetro passado em linha de
comando 
> para acionar um debug. Uma idéia bem simples, se na linha de comando
tiver um
> "-d" faço dentro do script d=1, caso contrário a variável d não
exite. Daí nos 
> pontos que desejo ter um debug escrevo, por exemplo:
> [ $d ]&&echo x=$x ou absolutamente o que quiser ou chamo funções, ou...
> fica super fácil e não perturba quando não solicitada. Quero
desligar aquele
> ponto de debug e manter os outros, só coloco um "#" antes.
> 
> Será que aquele cd ../.. falhou? Acho que não, pois há um exit 0
depois. :)
> 
> É o que me ocorre de momento, espero que ajude. Qualquer coisa se
manifeste.
> Aaahhhhh, por que não coloca após cada subscript:
> st=$?;[ $d ]&&echo scriptx status=$st
> Pelo menos saberá se ele passou pelo ponto. :)
> Para improvisar rápido, nem faça o esquema do -d, doloca direto:
> echo scriptx status=$?
> 
> Finalmente algo óbvio, se houver um exit em um subscript e ele for
chamado
> como source, ou com um "ponto espaço, antes do nome" se tiver um
exit o script
> chamador termina, pois é por ele que aquele código está sendo
executado, e
> não em um subshell.
> 
> É isso, agora não me ocorre mais nada.
> 
> 
> 
> ------------------------------------------------------------------
> >From: "miguelcm86"
> 
> >Criando a base de dados de etiquetas...
> >++ return 0
> >+ read escolha
> >+ cd ../..
> >+ exit 0
> >Portanto eu seleccionei todas as opcções, mas ele ficou só pela
> >primeira que é o adobe.
> >no script do adode.sh só tem estas linhas:
> >-----------------------------------------
> >place=/home/miguel/install/Option/Base/ ##neste caso isto não é
para nada
> >
> >sudo aptitude -y install acroread acroread-plugins mozilla-acroread
> >acroread-escript
> >
> >return 0
> >--------------------------------------
> >usei o source e o return, mesmo assim ele quando saio, voltou ao
> >inicio do ciclo e fez o "read escolha", não percebo porquê não
> >continuo com a próxima palavra e finalizou o script.
> >Vejam o código que está na primeira mensagem e digam-me o que acham.
>




reply via email to

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