1

As the title suggests I am asking about the main differences between .bashrc and /etc/profile. What I know is that .bashrc is a shell script that runs on login(I guess). And I know /etc/profile runs on ssh login or terminal login I also guess. Could someone please steer me in the right direction here?

5

I think this answer sums it up nicely:

From man bash:

Invocation

[...]

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, 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. The --noprofile option may be used when the shell is started to inhibit this behavior.

[...]

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.

| improve this answer | |
0

/etc/profile is global for all users. ~/.bashrc is per user login where you can set up your favorite environment.

| improve this answer | |
  • 1
    Ah. Thank you very much. But I would like a little bit more information than this. Perhaps, when each one is run. – NerdOfCode Jul 25 '17 at 20:26
  • 2
    This is not very clear. Could you please expand on everything? – wjandrea Jul 25 '17 at 20:29
0

The difference is more clear when you know when these two files are executed which is dependent on the type of login being performed. In Linux you can have two types of login shells, Interactive Shells and Non-Interactive Shells. An Interactive shell is used where a user can interact with the shell, i.e. your typical bash prompt. Whereas a non-Interactive shell is used when a user cannot interact with the shell, i.e. a bash scripts execution.

The difference is simple, the /etc/profile is executed only for interactive shells and the /etc/bashrc is executed for both interactive and non-interactive shells.

SUMMARY:

etcprofile: Used for default settings for all users when starting a login shell.

etcbashrc: Used to define defaults for all users when starting a subshell.

~/.profile: Specific settings for one user applied when starting a login shell.

~/.bashrc: Specific settings for one user applied when starting a subshell.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.