
Estou tentando receber uma mensagem de confirmação sempre que digito exit
comando no prompt de comando. Para fazer isso, tentei usar trap
in .bashrc
file mas parece que trap não é uma solução, pois ele executa o comando original de qualquer maneira. Existe uma maneira de eu ter isso?
Aqui está meu código de script bashrc que não conseguiu realizar o trabalho:
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
Responder1
Se o shell estiver zsh
ou bash
(embora não esteja no sh
modo), crie exit
uma função. As funções têm precedência sobre os shells internos (mesmo os especiais como exit
) em zsh
ou bash
(embora não em shells POSIX). Portanto, basta renomear sua função para exit
e usá-la command exit
dentro da função. Caso contrário, você teria recursões sem fim, é claro.
Responder2
A função de sobrecarga exit()
não se ajusta ao ^D
cenário. Então, vamos conversar sobre trap
.
Sua else
cláusula deve conter algumas coisas que podem conter o bash ou ignorar o sinal de saída. Eu também não sei como fazer isso.
Mas, por enquanto, alternativamente, acho que você pode reabrir o bash.
Se você substituir sua else
cláusula por esta:
echo
history -a
bash
E então, se você cancelar a saída no prompt, um novo bash será reaberto e parecerá que nada aconteceu, assim como no antigo.
Essa abordagem tem uma falha: você perderá as atribuições de variáveis digitadas antes, talvez possamos trabalhar nisso. Mas se você está bem com isso, é isso.
Você pode modificar esse código para atender às suas necessidades de qualquer maneira.