The question "What is the purpose of .bashrc and how does it work?" sought the purpose and use of .bashrc
. Another file with a similar name is .bash_logout
.
Should this file exist in the first place? If so, what is the role of this file?
The question "What is the purpose of .bashrc and how does it work?" sought the purpose and use of .bashrc
. Another file with a similar name is .bash_logout
.
Should this file exist in the first place? If so, what is the role of this file?
The .bash_logout
file does not have to exist.
Its content is sourced by bash
when a bash
login shell terminates. The file makes it possible to do, for example, various forms of cleanup when logging out from a terminal session.
You can use it to run any shell code, such as clearing the screen in non-GUI environments during logouts. Additionally, some users may find it handy for explicitly terminating processes that were initiated from .bash_login
or .bash_profile
. For example, if you've started a user daemon or background process like fetchmail
, you can terminate it conveniently within .bash_logout
.
The csh
shell has a similar file called .logout
, and the corresponding file for the zsh
shell is called .zlogout
. The ksh
shell has to my knowledge no similar functionality.
See also the tangentally related question Difference between Login Shell and Non-Login Shell?
From man bash
:
When a login shell exits, bash reads and executes commands from the files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.
Since this question asks for details of .bash_logout
file, it would be good to list various similar files.
We usually have these 6 files for various purposes:
/etc/profile
~/.bash_profile
~/.bash_login
~/.bashrc
~/.profile
~/.bash_logout
In some cases you might also come across .bash_history
file, which stores the commands which the user has executed.
Assuming that you are aware about .bashrc
and .bash_login
file, let's focus on the sequence of execution of these files and then we'll look at the purpose of .bash_logout
file.
Firstly when the user logs in and if the .bash_profile
file is available, it will be executed regardless of the existence of .bash_login
or .profile
file.
If that file is not available, then firstly the .bash_login
file will be executed, and if this file is also not available, then .profile
file will be executed.
Note that .bash_profile
file is read and any commands in this file are executed when the user logs in, but this file is not read when the user starts a new shell. If the user starts a new shell, .bashrc
file is read, for which you are quite aware of.
Coming to the .bash_logout
file, it is quite clear from the name that this file is executed when the user logs out. As one might agree, that the primary purpose of bash is to provide an environment which makes work easier for the user. So this file helps in creating an environment which can help to execute some commands when the user logs out. There can be plethora of instances. For illustration, let's assume the admin wants to kill all the processes started by that user when the user logs out. Or, the user might want to clear the .mysql_history
file. They might want to copy some files or take a backup while logging out. So you see, there can be many instances.
Let's assume the user wants to make a backup file of /etc
directory everytime they log out. So they might open the .bash_logout
file and type this command:
tar -cvjf /etc ~/path/to/destination
/usr/bin/sudo -K
or[ -f $HOME/.vault-token ] && /usr/bin/rm -f $HOME/.vault-token
. Also a good place to decide not to keep the command history, such as withhistory -c
. It's a good idea to have/usr/bin/clear
as the last line, so there's no record of your session left on a terminal. – vk5tu Aug 26 '21 at 06:19