What is the difference between
.profile was the original profile configuration for the Bourne shell (a.k.a.,
bash, being a Bourne compatible shell will read and use it. The
.bash_profile on the other hand is only read by
bash. It is intended for commands that are incompatible with the standard Bourne shell.
.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 == /bin/zsh ==> (Powerful 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 login into 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 login in
bash shell ,
~/.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:
~/.login = > When you login ~/.logout = > When you logout ~/.tcshrc = > same as ~./bashrc in bash shell 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 i 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 Note: if $ZDOTDIR unset, home set.
Note: TENEX C shell forked from C Shell, C Shell supports by BSD. If you familiar with C language programing,So you believe its syntax such as that.
~/.login ~/.cshrc ~/.logout Note : if you need to it, use tcsh and csh is old but live.
~/.profile 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 ~/.bash_profile and ~/.bash_profile runs ~/.bashrc, indeed ~/.bashrc isn't bash initialization file.Because bash doesn't run it.
It dead, Even when you use
man sh, you see manual of
~/.bash_profile work under
bash shell, but
~/.profile work under
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.