如何在提示之前传递值以读取输入?

时间:2019-06-07 05:51:10

标签: shell

我有一个shell脚本提示回答是/否。在提供输入前的提示下,我使用了control-c信号,该信号调用了信号处理功能。在信号处理功能中,有一个提示“ q”退出或“ y”和“ y”应与FIRST read提示一起使用。

我尝试(( echo "y" | read )),但没有成功

      ==========================================
           This is part of my script:

IntHandle ()

{ 
   echo -e "\nUse 'q' to quit "
   read var1 
   if [[ $var1 == q ]]
   then
        exit 1
   else
        echo "y" | read ----->here I need "y" to be an input to read prompt 
                             directly and being saved in "ans" variable in 
                             main body where I used control-c 
   fi
 }


trap 'IntHandle' SIGINT
read -p "no valid user id entered, new user ids? [y\n]: " ans ----> here 
                                  used control-c signal before give y/n to ans
if [[ $ans == "y" ]]
then 
     read -p " username :" name
fi
      .
      .
      .
      .
      .

================

输出应如下所示:

没有输入有效的用户ID,是否有新的用户ID? [y \ n]:输入了#control-c

'使用'q'退出'y ------>在Siganl Handeling中,“ y”输入的是“ q”                           函数,然后将其保存在“ ans”变量中                            提示用户名的条件为真。

用户名:Larry ----->在真实条件后输入的名称。 。 。

1 个答案:

答案 0 :(得分:1)

代替

echo "y" | read

尝试:

ans=y

需要在触发陷阱之前对陷阱函数进行定义。所以我将其移至文件顶部。

函数完成后,控制权返回到被Ctrl-C中断的read语句。因此,我将取代原来的提示而不是echo "y" | readans=y

IntHandle ()
{ 
  echo -e "\nUse 'q' to quit "
  read var1 
  if [[ $var1 == q ]]
  then
       exit 1
  else
       echo -n 'no valid user id entered, new user ids? [y\n]: '
  fi
}