Как передать значение для чтения ввода, прежде чем будет предложено?

У меня есть скрипт оболочки, запрашивающий ответ да / нет. в подсказке перед вводом я использовал сигнал control-c, который вызывает функцию обработки сигналов. В функции обработки сигналов есть подсказка «q» для выхода или «y» и «y» следует использовать с подсказкой «FIRST read».

Я пытался ((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 ------> здесь "y" вводится вместо "q" в функции Siganl Handeling, затем сохраняется в переменной «ans», которая получает условие true для запроса имени пользователя.

usernames: Larry -----> имя, которое вводится после истинного условия. , , .

0
задан 8 June 2019 в 19:44

1 ответ

Это проблема X-Y. С какой стати использовать read для установки переменной в скрипте?

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

Это сделало бы функцию похожей на это:

IntHandle ()
{ 
  echo -e "\nUse 'q' to quit "
  read var1 
  if [[ $var1 == q ]]
  then
      exit 1
  else
      ans=y
  fi
}
2
ответ дан 8 June 2019 в 19:44

Другие вопросы по тегам:

Похожие вопросы: