Script Bash saindo quando repetido na execução de duplo clique

1

Este é o meu código

#!/bin/bash
function boo {

    function goo {
        echo "Please enter name"
            read name;
        echo "Hello $name"

    }

    function xoo {

        echo "Please enter number"
        read numl;
        echo "$numl"
    }

    read -p "'echo $'\n> \n>''  Name N or Number S'echo $'\n> \n>''" var
        if [[ $var =~ [nN](es)* ]]
            then    
                goo   
                elif [[ $var =~ [sS](es)* ]]
                then
                xoo
                fi

}
boo
read -p "'echo $'\n> \n>''  To Repeat press Y'echo $'\n> \n>''" prompt
if [[ $prompt =~ [yY](es)* ]]
then
boo    
else
echo""
fi

Inicialmente, posso executar este script com êxito clicando duas vezes, mas quando tentei repeti-lo, ele saiu

> 
>  Name N or Number S
> 
>n
Please enter name
john
Hello john

> 
>  To Repeat press Y
> 
>y

> 
>  Name N or Number S
> 
>n
Please enter name
ajay

Eu sou capaz de imprimir oi joão, mas quando eu entro em sua saída. Alguma idéia do que está acontecendo

    
por potholiday 29.07.2015 / 05:01

1 resposta

1

Seu problema é o if…then . Após a primeira chamada desligar boo , verifique o valor de prompt e boo será iniciado, se prompt for y . Depois disso, não há mais código para executar e o script sai.

Usando este script

#!/bin/bash
function boo {
    function goo {
        echo "Please enter name"
        read -r name;
        echo "Hello $name"
    }

    function xoo {
        echo "Please enter number"
        read -r numl;
        echo "$numl"
    }

    read -rep $'\n> \n> Name N or Number S \n> \n> ' var
    if [[ $var =~ [nN](es)* ]]; then    
      goo   
    elif [[ $var =~ [sS](es)* ]]; then
      xoo
    fi
}

while true; do
  boo
  read -rep $'\n> \n> To Repeat press Y \n> \n> ' prompt
  if [[ ! $prompt =~ [yY](es)* ]]; then
    break
  fi
done

exit 0

Exemplo

% ./foo

> 
> Name N or Number S 
> 
> N
Please enter name
abc
Hello abc

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
def
Hello def

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
jjj
Hello jjj

> 
> To Repeat press Y 
> 
> n
%
    
por A.B. 29.07.2015 / 09:03