Limpei e deixei o essencial na sua mensagem abaixo. Sugiro que faça o mesmo se quiser que as pessoas leiam. Tudo o que ocorre dentro dos subscript não tem importância, a menos que a execução não retorne dele.
Perfeito, o set -x fez o serviço. O que eu precisava saber está nestas duas linhas: >+ read escolha >+ cd ../.. Ou seja, o script sempre executou o read antes de sair, pelo menos nestes dois testes relatados. Já ficou bem mais fácil. Eu arriscaria dizer que há reads nesses scripts lendo a partir de fd0 (stdin) do MESMO terminal. Daí não interessa onde estão, nem se são executados em subshell ou como source. Retire o set -x, ele não vai mais ajudar, só atrapalhar. antes do while escreva: escolhas="$escolhas 1 2 3 4 5 6 7 8 9" # para ter mais entradas :) Não tenho outra idéia para teste a não ser insirindo imediatamente antes do "done": echo -ne "----\n$escolhas\n----\nexecutado: |$escolha| press enter";read<&2 Veja que estou usando um read dentro do loop, mas não estou lendo o fd0 (&0). Selecione todas as suas opções, quanto mais melhor. Cada vez que o script chegar ao final do conteúdo do loop imprimirá a variável usada e a lista. Se estiver com sorte deverá ver saltos durante a execução, ou seja o ponteiro do read está sendo avançado nos subscripts, acarretando saltos na lista das opções marcadas. A seguir substitua o while por for, acho que o IFS está ok: for escolha in $escolhas #echo "$escolhas" | while read escolha Reexecute. Não ponho minha mão no fogo pois a certeza não é 100%, mas eu arriscaria 99. Aconteceu o que você queria? Caso afirmativo estará confirmado, pode tentar verificar com: grep 'read ' * se existe o comando read nos seus subscripts, ou outros que eles chamem. Recentemente eu postei sobre isso, inclusive com exemplo lendo os 3 fds do shell, só que se não me engano o problema era exatamente o opstodo seu. Não seja imediatista, substituindo o "while" pelo "for" e pronto. Faça pelo menos a sequencia com a impressão da variável ou não fixará tão bem esses detalhes. Se der certo ainda economizou um tubo, o "|", além dos " ( ) ". :) ------------------------------------------------------------------ >From: "miguelcm86" >+ read escolha >+ case $escolha in >+ . ./d4x.sh >++ place=/home/miguel/install/Option/Base/ >++ sudo aptitude -y install d4x >++ return 0 >+ read escolha >+ case $escolha in >+ . ./amule.sh >++ place=/home/miguel/install/Option/Base/ >++ sudo aptitude -y install amule >++ return 0 >+ read escolha >+ cd ../.. >+ exit 0 >------------------------------------------------------------------ >segundo teste só instalou um programa, aqui imprimi a lista que >seleccionei no xdialog: >+ echo 'Firestarter >AcetoneISO2 >IE4linux >Audacity >Kino >Thunderbird >Sunbird >Dia >K3b >Skype >KDE' >+ read escolha >+ case $escolha in >+ . ./firestarter.sh >++ place=/home/miguel/install/Option/Base/ >++ sudo aptitude -y install firestarter >++ return 0 >+ read escolha >+ cd ../.. >+ exit 0 >---------- >isto por acaso já me tinha acontecido, uma hora dá uns poucos, outra >hora só dá alguns ou 1... --------------------------------------------------------------------- Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso. --------------------------------------------------------------------- Sair da lista: [EMAIL PROTECTED] --------------------------------------------------------------------- Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net --------------------------------------------------------------------- Servidor Newsgroup da lista: news.gmane.org Grupo: gmane.org.user-groups.programming.shell.brazil Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/shell-script/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
