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

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

[shell-script] Re: Script sai quando não devia


From: mop
Subject: [shell-script] Re: Script sai quando não devia
Date: Sat, 01 Dec 2007 00:04:39 -0200

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]