Подтвердите перед выходом из командной строки.

Подтвердите перед выходом из командной строки.

Я пытаюсь получить сообщение подтверждения каждый раз, когда я ввожу exitкоманду в командной строке. Чтобы сделать это, я пытался использовать trapin .bashrcfile, но, похоже, 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, и он будет выглядеть так, как будто ничего не произошло, так же, как и старый.

У этого подхода есть недостаток: вы потеряете назначения переменных, которые вы ввели ранее, возможно, мы сможем над этим поработать. Но если вас это устраивает, то вот оно.

В любом случае вы можете изменить этот код в соответствии со своими потребностями.

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