Zhe*_*hua 4 linux bash zsh shell
我经常使用 Ctrl-D 退出交互式 python 会话,但有时当 python 会话未打开时我会不小心点击它。这将导致向外壳发送 EOF 并随后关闭它(不要求确认)。我通过谷歌搜索得出了两种解决方案:
set -o ignoreeof
export IGNOREEOF=10
第一个选项在我的 zsh shell 和 bash shell 中完美运行。但是,第二个选项似乎只适用于 bash。当我在 zsh 中时,无论我为 设置什么数字IGNOREEOF
,它都会像未设置一样发送 EOF。
有人可以帮助解释为什么 ZSH 会这样行事,还是只是我的 zsh shell 中某些特殊环境设置的结果?
ZshIGNOREEOF
不像 Bash 那样使用参数。相反,它是您必须通过setopt
内置选项设置的选项。来自zshoptions(1)
:
IGNORE_EOF (-7)
不要在文件结束时退出。需要使用退出或注销。 但是,十个连续的 EOF 无论如何都会导致外壳退出,以避免外壳在其 tty 消失时挂起。
此外,如果设置此选项并使用 Zsh 行编辑器,则可以将 shell 函数实现的小部件绑定到 EOF(通常为 Control-D)而不打印正常的警告消息。这仅适用于普通小部件,不适用于完成小部件。
--如果你想模仿 Bash 的 IGNOREEOF,第二段很重要;见下文
您可以通过将以下内容添加到 shell 配置来启用此选项:
setopt ignore_eof # Option names are case-insensitive and underscores are optional.
Run Code Online (Sandbox Code Playgroud)
如果您想模拟能够在退出 shell 之前指定Ctrl+D序列数量的 Bash 行为,那么您可以将以下ZLE 小部件定义* 添加到您的配置中:
setopt ignore_eof # Option names are case-insensitive and underscores are optional.
Run Code Online (Sandbox Code Playgroud)
然后,将小部件添加到 ZLE 并为其创建一个键绑定:
zle -N bash-ctrl-d
bindkey '^D' bash-ctrl-d
Run Code Online (Sandbox Code Playgroud)
ignore_eof
但是,您仍然需要设置该选项,否则Ctrl+D将忽略 ZLE 并立即退出 shell,而不管此小部件如何。请参阅答案开头的手册页片段的第二段。
* - 此小部件归功于其原作者 Christoph Lange 和 Bart Schaefer 的更正
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |