.

           .

У меня есть скрипт оболочки, предлагающий ответ y/n. В приглашении перед вводом я использовал сигнал control-c, который вызывает функцию обработки сигналов. В функции обработки сигналов есть приглашение "q" для выхода или "y", и "y" следует использовать с ПЕРВЫМ приглашением чтения.

Я пытался (( echo "y" | read )) но не получилось

Это часть моего сценария:

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

.

Вывод должен быть таким:

не введен действительный идентификатор пользователя, новые идентификаторы пользователей? [y\n]: введен #control-c

' Используйте 'q' для выхода ' y ------> здесь вместо 'q' вводится 'y' в функции обработки сигналов, затем он сохраняется в переменной 'ans', которая принимает условие true для запроса имени пользователя.

имена пользователей: Ларри -----> имя, которое вводится после истинного условия. . . .

решение1

Это проблема XY. Зачем вообще использовать readдля установки переменной в скрипте?

Установите его обычным способом;ans=y

Это приведёт к тому, что функция будет выглядеть следующим образом:

IntHandle ()
{ 
  echo -e "\nUse 'q' to quit "
  read var1 
  if [[ $var1 == q ]]
  then
      exit 1
  else
      ans=y
  fi
}

Связанный контент