我正在尝试在用户注销时运行脚本。我的 Linux 发行版是使用 KDE 的 Pardus。我该怎么做?
我听说过“/.bash_logout”,但我无法实现它。我应该在哪里创建“/.bash_logout”文件?
答案1
我假设您希望按用户进行以下操作
有几个不同的选择,但首先为了消除误解,你提到“/.bash_logout”,但我所见过的所有地方都建议~/.bash_logout
。
这~是“此用户的主页”的简短说法。因此这意味着您需要.bash_logout
在 中创建文件/home/USERNAME/.bash_logout
。
另一个选择是使用 KDE 的建议:/home/USERNAME/.kde4/shutdown/
。在那里添加脚本并确保它们是可执行的(chmod +x ~/.kde4/shutdown/scriptname.sh
)。如果文件夹不存在,只需创建它。
如果你希望这种情况发生全部用户
使用/usr/shutdown/
。
注意:我没有 KDE 来为您测试 KDE 的具体情况。
答案2
首先,您可以在主目录中创建一个名为的文件.bash_logout
。
请注意前面的点。这表示配置文件,ls
除非您添加-a
选项,否则这些文件通常不会在您输入时列出。
首先检查你的系统是否支持此文件。(例如,如果你不运行 bash,它可能不会执行任何操作。你可能正在使用其他 shell,例如 zsh、sh、pinosh、dc、...
测试这一点非常简单,只需执行vim ~/.bash_logout
并在其末尾添加一行即可echo This works!
。从文本控制台注销并检查它是否在屏幕上回显“这有效!”。如果您使用的是图形环境,它会在您注销时关闭终端,那么在 .bash_logout 文件中放置另一个命令可能会更方便。(例如命令touch bash_logout_last_tiggered
。这将设置文件的修改日期bash_logout_last_tiggered到触摸命令运行的时间)。
接下来阅读禁止。基本上,当您从 shell 注销时,每个仍在运行的程序都会收到一个信号,告知其停止。此信号称为HUP
(挂断)。这个名字源于人们使用电话线拨号接入服务器的时代/当线路上有噪音时,这些连接有时会中断。然后您可以选择保持程序运行或进行清理。所做的选择是向所有程序发送信号 1,SigHUP。然后程序将整齐地清理(例如,文本编辑器将保存其文件并退出。游戏将保存并退出,等等)。
您可以编写一个程序并允许它拦截请求,在这种情况下您可以选择不做任何事情。或者使用nohup
包装器为您完成此操作。
例子:
cd /usr/src/linux ; make bzImage
将开始编译新内核。这可能需要很长时间(在 80486 时代通常需要几个小时)。
在此期间,我的终端一直很忙,希望显示新内核编译成功。我无法做其他任何事情。
现在,如果我&
在命令中添加一个 & 符号 ( ),它将在后台运行。
但是,当我注销时,它仍会收到 sigHup。
解决方案:**nohup** command_here **&**
。
请注意命令前面的 nohup 和末尾的 & 符号(这也意味着它不会接收输入)。
所有这些都假设您正在运行 bash,并且您不想从 KDE 窗口管理器触发任何操作。我确信这也是可能的(但这不是问题所在)。