How do you run a script on login in *nix?
From wikipedia Bash
When Bash starts, it executes the commands in a variety of different scripts.
When Bash is invoked as an interactive login shell, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.
When a login shell exits, Bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force Bash to read and execute commands from file instead of ~/.bashrc.
At login, most shells execute a login script, which you can use to execute your custom script. The login script the shell executes depends, of course, upon the shell:
- bash: .bash_profile, .bash_login, .profile (for backwards compabitibility)
- sh: .profile
- tcsh and csh: .login
- zsh: .zshrc
You can probably find out what shell you're using by doing
echo $SHELL
from the prompt.
For a slightly wider definition of 'login', it's useful to know that on most distros when X is launched, your .xsessionrc will be executed when your X session is started.
When using Bash, the first of ~/.bash_profile
, ~/.bash_login
and ~/.profile
will be run for an interactive login shell. I believe ~/.profile
is generally run by Unix shells besides Bash. Bash will run ~/.bashrc
for a non-login interactive shell.
I typically put everything I want to always set in .bashrc
and then run it from .bash_profile
, where I also set up a few things that should run only when I'm logging in, such as setting up ssh-agent
or running screen
.