
Я пытаюсь получить сообщение подтверждения каждый раз, когда я ввожу exit
команду в командной строке. Чтобы сделать это, я пытался использовать trap
in .bashrc
file, но, похоже, trap не является решением, так как он в любом случае запускает исходную команду. Есть ли способ сделать это?
Вот мой код скрипта bashrc, который не смог выполнить работу:
function _exit() # Function to run upon exit of shell.
{
read -p "${RED}Are you sure? " REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}Bye${NC}"
exit 0
else
#I do not know what to do here to not exit
return
fi
}
trap _exit EXIT
решение1
Если оболочка — zsh
или bash
(хотя и не в sh
режиме), создайте exit
функцию. Функции имеют приоритет над встроенными функциями оболочки (даже специальными, такими как exit
) в zsh
или bash
(хотя и не в оболочках POSIX). Так что просто переименуйте свою функцию в exit
и используйте command exit
внутри функции вместо этого. Иначе у вас была бы бесконечная рекурсия, конечно.
решение2
Функция перегрузки exit()
не подходит для этого ^D
сценария. Итак, давайте поговорим о trap
.
Ваш else
пункт должен содержать некоторые вещи, которые могут либо удерживать bash, либо игнорировать сигнал выхода. Я тоже не знаю, как это сделать.
Но сейчас, я думаю, в качестве альтернативы вы можете снова открыть bash.
Если вы замените свой else
пункт следующим:
echo
history -a
bash
А затем, если вы отмените выход в командной строке, будет заново открыт новый bash, и он будет выглядеть так, как будто ничего не произошло, так же, как и старый.
У этого подхода есть недостаток: вы потеряете назначения переменных, которые вы ввели ранее, возможно, мы сможем над этим поработать. Но если вас это устраивает, то вот оно.
В любом случае вы можете изменить этот код в соответствии со своими потребностями.