I can't seem to find any clear information on what the .bashrc file is and what it does exactly.

Thanks for all the help so far. It seems that this script does everything from coloring, completion, aliases and shell history, etc. Is there anything that does not seem useful?

  • 4
    .bashrc is one of the many bash conmfiguration files. See the official documentation on Bash Startup Files. – muru Oct 24 '14 at 5:00

The .bashrc file is a script that is executed whenever a new terminal session is started in interactive mode. This is what happens when you open a new terminal window by pressing Ctrl+Alt+T, or just open a new terminal tab.

By contrast a terminal session in login mode will ask you for user name and password and execute the ~/.bash_profile script. This is what takes place, for instance, when you log on to a remote system through SSH.

The .bashrc file itself contains a series of configurations for the terminal session. This includes setting up or enabling: colouring, completion, the shell history, command aliases and more. The .bashrc file distributed with Ubuntu is well commented and you will be able to understand most of what it does just by reading it.

You can tweak .bashrc to your liking. Here you can get an example with many extra features.

  • The link is broken. – rab Jun 5 '16 at 8:16
  • 1
    The link is working. – Luís de Sousa Jun 5 '16 at 8:28
  • In that page download file is not working. – rab Jun 5 '16 at 8:56
  • 1
    Both the link and the download work fine – M. Becerra Feb 22 '17 at 20:09

Question on superuser -What is the .bashrc file? by @pineapple and answered by @DigitalRoss

Actually, it's bash specifically that reads .bashrc (and /etc/bash.bashrc). There are lots of different shells.

The bash man page (by Brian Fox and Chet Ramey; also info page "Bash Startup Files") is the authoritative reference:

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.

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

but the value of the PATH variable is not used to search for the file name.

The file is just shell commands. It is typically used to change prompts, set environment variables, and define shell procedures. Traditionally, the file .profile is used for this purpose, but bash has so many extensions that it needs its own startup file for users that want to put bashisms in startup files.

"Not a login shell" means things like script launches and usually terminal windows started by window managers. Sometimes I set up *nix systems to have .bashrc and BASH_ENV just source .profile. As long as you don't stray outside of POSIX shell commands then you will get the same initialization in any shell.

It's particularly valuable when sh is really bash, which sometimes happens. To do this use:

. .profile

One reason this is all so complex is because sometimes people put things that produce output into shell startup files, or they unconditionally set prompts. This causes lots of problems when running shell programs and backtick commands within languages, not to mention system(3) from C programs. The way bash starts up is designed, I think, to have one file where output and prompt setting is OK and one file where it isn't. Traditionally, a run-time test would be done to distinguish interactivity, for example, checking to see if the prompt is set.

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.