O Zsh não usa o parâmetro IGNOREEOF
como o Bash. Em vez disso, é uma opção que você deve definir por meio do setopt
builtin. De zshoptions(1)
:
IGNORE_EOF (-7)
Do not exit on end-of-file. Require the use of exit or logout instead. However, ten consecutive EOFs will cause the shell to exit anyway, to avoid the shell hanging if its tty goes away.
Also, if this option is set and the Zsh Line Editor is used, widgets implemented by shell functions can be bound to EOF (normally Control-D) without printing the normal warning message. This works only for normal widgets, not for completion widgets.
- O segundo parágrafo é importante se você deseja emular o IGNOREEOF do Bash; veja abaixo
Você pode ativar essa opção adicionando o seguinte à sua configuração de shell:
setopt ignore_eof # Option names are case-insensitive and underscores are optional.
Emulando Bash (Opcional)
Se você gostaria de emular o comportamento de Bash de poder especificar o número de seqüências Ctrl + D antes de sair do shell, então você pode adicionar o seguinte < uma definição de widget ZLE * para sua configuração:
# Emulate Bash $IGNOREEOF behavior
bash-ctrl-d() {
if [[ $CURSOR == 0 && -z $BUFFER ]]
then
[[ -z $IGNOREEOF || $IGNOREEOF == 0 ]] && exit
if [[ $LASTWIDGET == bash-ctrl-d ]]
then
(( --__BASH_IGNORE_EOF <= 0 )) && exit
else
(( __BASH_IGNORE_EOF = IGNOREEOF-1 ))
fi
zle send-break
else
zle delete-char-or-list
fi
}
Em seguida, adicione o widget ao ZLE e crie um atalho para ele:
zle -N bash-ctrl-d
bindkey '^D' bash-ctrl-d
Você ainda precisará definir a opção ignore_eof
, caso contrário Ctrl + D irá ignorar o ZLE e sair imediatamente do shell, independentemente deste widget. Consulte o segundo parágrafo do snippet man page no início da resposta.
* - O crédito por este widget vai para seu autor original, Christoph Lange, e Bart Schaefer por suas correções