双击执行时重复 Bash 脚本退出

双击执行时重复 Bash 脚本退出

这是我的代码

#!/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

最初我可以通过双击成功运行该脚本,但当我尝试重复它时,它退出了

> 
>  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

我可以打印 hello john,但是当我输入 ajay 时,它就退出了。知道发生了什么吗

答案1

您的问题是if…then。第一次调用后,boo您检查 的值prompt,如果 ,boo则将启动。此后,没有更多代码可执行,脚本退出。prompty

使用此脚本

#!/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

例子

% ./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
%

相关内容