TLDR
read
функция не останавливает чтение ввода после того, как Ctrl + C , вместо этого она ожидает ввода данных пользователем в конце другой функции, которая следует после один это было в.
ОПИСАНИЕ
Итак, у меня есть скрипт стиля меню петли с несколькими функциями, по одной для каждой опции в меню.
Теперь проблема в одной из моих функций у меня такие строки:
printf "Enter your choice: "
read var_boxChoice
После того, как всплывающее диалоговое окно "Enter your choice: "
и функция чтения начинает ждать ввода пользователя, я использую клавиши Ctrl + C , чтобы убить функцию (которая перехвачена с помощью команды trap 'f_menu' SIGINT
над функцией главного меню, чтобы она не убивала весь скрипт), а затем меня переводят в главное меню (как и предполагалось).
После этого я выбираю другую функцию, в которой есть только этот код:
clear
printf "Feature is not yet implemented! \nReturning to the main menu in 5 seconds."
sleep 5
И тогда возникает проблема. Вместо того, чтобы снова возвращаться в главное меню, после выполнения sleep 5
функция read
из первой функции ожидает ввода пользователя. Я знаю, что это так, потому что механизм обработки ошибок ввода говорит мне, что read
происходит от первой функции.
Что мне делать?
Как убить ввод?
Боюсь, я не могу опубликовать больше кода, поэтому я извиняюсь впереди.
Спасибо!
EDIT:
Для тех, кому нужен весь код, вот небольшой пример, который я переделал для этой цели.
#!/bin/bash
var_answer1 = 0
var_answer2 = 0
f_blah1(){
printf "Whatever 1"
sleep 2
}
f_blah2(){
printf "Whatever 2"
sleep 2
}
f_option1(){
clear
printf "====================================================================\n"
printf "What do you want to do?\n"
printf "====================================================================\n"
printf "1) Do this\n"
printf "2) Do that\n"
printf "====================================================================\n"
printf "Enter your choice: "
read var_answer2
printf "====================================================================\n\n"
sleep 1
if [ "$var_answer2" -eq "1" ]; then
f_blah1
elif [ "$var_answer2" -eq "2" ]; then
f_blah2
else
clear
printf "====================================================================\n"
printf "'$var_boxChoice' is not a viable answer!\nYou can only enter numbers 1 and 2!\n";
printf "====================================================================\n"
sleep 3
fi
}
f_option2(){
clear
printf "Meh. I'm sleeping for 5 seconds. Then I'll return to main."
sleep 5
}
trap 'f_menu' SIGINT
f_menu(){
clear
printf "====================================================================\n"
printf "Select an option:\n"
printf "====================================================================\n"
printf "1) Option 1\n"
printf "2) Option 2\n"
printf "3) Quit\n"
printf "====================================================================\n"
printf "Enter your choice: "
read var_answer1
printf "====================================================================\n\n"
sleep 0.5
if [ "$var_answer1" -eq "1" ]; then
f_option1
elif [ "$var_answer1" -eq "2" ]; then
f_option2
elif [ "$var_answer1" -eq "3" ]; then
printf "====================================================================\n"
printf "Quitting the app... Thanks for using it!\n"
printf "====================================================================\n"
sleep 3
clear
exit
else
clear
printf "====================================================================\n"
printf "'$var_answer' is not a viable answer!\nYou can only enter numbers 1-3!\n";
printf "====================================================================\n"
sleep 2
fi
}
while [ 1 > 0 ]
do
f_menu
done