У меня есть скрипт оболочки, предлагающий ответ 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
}