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

标签 bash shell terminal sh kill-process

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

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

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

(.bash_logout 当终端被杀死时不要覆盖它)。

最佳答案

How I would execute some script when terminal is killed?

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

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

当然,您可以将 command to execute 替换为 source ~/.bash_exit 并将所有命令放入文件 .bash_exit 中主目录。

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

[ -t 0 ] 检查标准输入是否连接到终端。由于 || 仅当测试失败时才执行下一个命令,它在关闭终端时执行,但对于其他退出 bash 的常用方法(例如按 CtrlD 在提示符下或执行 exit)。

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

在我听说过的终端中,bash 总是在窗口关闭时收到 SIGHUP 信号。有时甚至会有两个 SIGHUP;一个来自终端,一个来自 pty(伪终端)关闭时的内核。但是,有时两个 SIGHUP 都会在交互式 session 中丢失,因为 bash 的 readline temporarily uses its own traps .奇怪的是,SIGHUP 似乎总是在存在 EXIT 陷阱时被捕获;即使那个 EXIT 陷阱什么都不做。

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

关于bash - 终止终端后是否可以执行 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68510357/

相关文章:

arrays - 在 bash 中从新行创建数组

linux - bash 列出当前文件夹中的子文件夹没有给出预期的结果 [只给出第一个文件夹]

linux - 用于验证Linux上make版本的Shell脚本

mysql - 在 Mac OS 终端上,如何防止 mycli 将查询结果转发到文本查看器

python - 如何在 Gnome 终端中对 Python 错误的输出进行着色?

windows - 命令行vs命令提示符vs终端? shell ?

bash - 无法弄清楚如何修复 shellcheck 投诉,即从另一个脚本启动一个脚本时我不应该使用 glob 作为命令

bash - 为什么for循环中有不同的输出

shell - 如何从 shell 脚本运行 ant 脚本?

查找二元组的 Shell 脚本