类似于邮政关于cd
,我已覆盖exit
以执行以下操作:
function exit() { $HOME/script.sh && builtin exit "$@"; }
尽管exit
直接调用时它可以按预期工作,但是当通过 CTRL-D 退出 shell 时,它不会执行,或者,如果它确实执行,脚本也无法完成。
发生了什么?除了exit
使用 CTRL-D 时调用的方法外,还有其他方法吗?
答案1
当您按下Ctrl+时D,您实际上对 bash 说的是EOF
(文件结束)。因此,shell 只是终止,因为没有更多输入可读取。如果您想在退出时执行操作,请使用陷阱:
trap "~/script.sh" exit
使用“exit”陷阱,你可以执行任何 shell 命令就在之前exit
shell 退出,并且 shell 是通过还是通过Ctrl+ 终止并不重要D。
答案2
来自 bash 手册页:“当登录 shell 退出时,bash 将从文件 ~/.bash_logout 读取并执行命令(如果存在)。”