终止终端后是否可以执行 bash 脚本?

Is it possible to execute a bashscript after kill a terminal?

我知道有一个名为 .bash_profile 的文件会在您打开终端时执行代码 (bashscript)。

还有另一个名为 .bash_logout 的文件会在您退出终端时执行代码。

当终端被杀死时我将如何执行一些脚本?

.bash_logout终端被杀死时不要覆盖这个)。

How I would execute some script when terminal is killed?

我将其解释为 “在终端 window 关闭时执行脚本”。为此,请在 .bashrc.bash_profile 中添加以下内容:

trap '[ -t 0 ] || command to execute' EXIT

当然你可以用 source ~/.bash_exit 替换 command to execute 并将所有命令放在你的主目录中的文件 .bash_exit 中。

每当 shell 退出时执行特殊的 EXIT 陷阱(例如通过关闭终端,也可以通过按 CtrlD,或执行 exit,或 ...)。

[ -t 0 ] 检查 stdin 是否连接到终端。由于 || 仅当测试失败时才执行下一个命令,关闭终端时会执行此操作,但不会用于其他退出 bash 的常用方法(例如按 Ctrl D 在提示符下或执行 exit).

失败的尝试(仅当您尝试查找和替代时才读)

在我听说过的终端中,当 window 关闭时,bash 总是收到一个 SIGHUP 信号。有时甚至会有两个 SIGHUP;一个来自终端,一个来自 pty(伪终端)关闭时的内核。然而,有时两个 SIGHUP 都在交互式会话中丢失,因为 bash 的 readline temporarily uses its own traps。 St运行够厉害的是,当存在 EXIT 陷阱时,SIGHUP 似乎总是会被捕获;即使那个 EXIT 陷阱什么都不做。

但是,我强烈建议不要在 SIGHUP 上设置任何陷阱。 Bash 仅在当前命令完成后处理非 EXIT 陷阱。如果您 运行 sh -c 'while true; do true; done' 并关闭了终端,bash 将在后台继续 运行,就像您使用 disownnohup 一样。