You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Without the trap the output has no problem when i press ^C 3 times. The preexec was not called.
❯ ^C
❯ ^C
❯ ^C
❯
But when the trap is enabled then the test func is called 2 times per each ^C. Once with the last command from preexec, once with the argument from the trap.
clear
sigint
clear
sigint
clear
sigint
❯
With a similar test code, zsh doesn't have this weird behavior. test is only called from the trap.
❯ sigint
❯ sigint
❯ sigint
❯
The zsh equivalent test code:
test() {
echo$1
}
TRAPINT() {
test sigint
return$((128+$1))
}
autoload -Uz add-zsh-hook
add-zsh-hook preexec test
PROMPT="❯ "
The text was updated successfully, but these errors were encountered:
Due to the current approach of preexec using the DEBUG trap, I think there is no way to distinguish the execution of a trap handler from that of a user command. In Bash 5.3+, one might use PS0 + funsub as a more robust implementation of preexec.
Function added to
preexec_functions
is called twice when it is also added to a SIGINT trap and ^C is pressed.Test code for bash:
Without the
trap
the output has no problem when i press ^C 3 times. The preexec was not called.But when the trap is enabled then the
test
func is called 2 times per each ^C. Once with the last command from preexec, once with the argument from the trap.With a similar test code,
zsh
doesn't have this weird behavior.test
is only called from the trap.The zsh equivalent test code:
The text was updated successfully, but these errors were encountered: