What is the difference between
.profile on startup.
bash will try to source
.bash_profile first, but if that doesn't exist, it will source
Note that if
bash is started as
/bin/sh is a link to
/bin/bash) or is started with the
--posix flag, it tries to emulate
sh, and only reads
- Actually, the first one of
You know many shells exist in the UNIX world, but most of them are:
- Bourne shell:
/bin/sh(Inventor: Stephen Bourne)
- BASH (Bourne Again Shell):
/bin/bash(Inventor: Brian Fox, under GNU project) (powerful shell)
- C shell:
/bin/csh(Inventor: Bill Joy, Inventor of TCP/IP Stack)
- Korn shell:
/bin/ksh(Inventor: David Korn under Bell Labs)
- Z shell:
- TENEX C shell:
/bin/tcsh(derived from C Shell)
- Debian Almquist shell:
/bin/dash(Derived from Almquist shell (ash under NetBSD project)) (Dash born from lenny)
But your question is about
When you you log in to a UNIX machine, it redirects to your home directory, according to the shell chosen by an administrator in the last field of
/etc/passwd such as :
Your shell runs, and by default each shell has a set file for
logout. When you log in on bash,
~/.profile is run and when you
~/.bash_logout is run.
~/.bash_history file keeps your input command.
Initialization file in each shell
TENEX C shell
~/.loginWhen you login
~/.logoutWhen you logout
You can set variable
$histfile as name of history file and variable
$history as number of commands to keeping.
Indeed it's powerful shell and if you get free time, be sure migrate to it.
Except of other shell, Z shell has many configuration file and initialization files, just i write:
$ZDOTDIR/.zshenv $ZDOTDIR/.zprofile $ZDOTDIR/.zshrc $ZDOTDIR/.zlogin $ZDOTDIR/.zlogout /tmp/zsh* /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin
$ZDOTDIR unset, home set.
Note: TENEX C shell was forked from C shell. C shell supports by BSD. If you are familiar with C language programing, you should be comfortable since its syntax is similar.
~/.login ~/.cshrc ~/.logout
Note: csh is old. Use tcsh instead.
- rc file: user defined
- logout file: N/A
Bourne Again SHell (BASH)
It's very very powerful shell and born under GNU project and forked by Bourne Shell.
~/.bash_login ~/.bash_logout ~/.bashrc ~/.bash_profile ~/.bash_history
When you login, bash runs
~/.bashrc isn't bash initialization file, because bash doesn't run it.
It dead. Even when you use
man sh, you see manual of
dash. [Editor's note: the bit about
dash only applies to Debian and Debian-based distros like Ubuntu.]
~/.bash_profile work under bash, but
~/.profile work under Bourne and Korn shell.
A login shell is simply a shell you can login as via it ssh or at the console. A non-login shell is a shell that someone can not login too. A non-login shell is often used by programs/system services.
As for your third point. It is true
.bashrc is executed on each instance of the shell. However
.bash_profile is only used upon login. Thus the reason for the two separate files.
.profile is for things that are not specifically related to Bash, like environment variables $PATH it should also be available anytime.
.bash_profile is specifically for login shells or shells executed at login.