我知道有一个名为 .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 将继续在后台运行,就像您使用了 disown
或 nohup
一样。
关于bash - 终止终端后是否可以执行 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68510357/