202

If you create an alias for example:

alias cls="clear"

It exists untill you kill terminall session. When you start a new terminal window the alias doesn't exist any more. How to create "permanent" alias, one that exists in every terminal session?

  • 5
    As for this particular example, ^L (Control-l) clears the screen as well. – loevborg Aug 6 '10 at 16:10
220

You can put such aliases in the ~/.bash_aliases file.

That file is loaded by ~/.bashrc. On Ubuntu 10.04, the following lines need to be uncommented to enable the use of ~/.bash_aliases. On Ubuntu 11.04 and later, it's already enabled:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

The aliased command will be available on any new terminal. To have the aliased command on any existing terminal one need to source ~/.bashrc from that terminal as,

source ~/.bashrc
| improve this answer | |
  • 13
    +1 I recommend this over editing ~/.bashrc. While indeed useful for a variety of other purposes, ~/.bashrc just has too many elements that could throw off a user who is unfamiliar with the peculiarities of Linux shells. – ændrük Oct 6 '10 at 21:50
  • 6
    example: echo "cls='clear'" >> ~/.bash_aliases && source ~/.bash_aliases – hobs Sep 10 '12 at 15:56
  • 4
    @ændrük I actually find the profusion of shell config files confusing. In my mind it is easier if there is one fairly long config file with all the settings. – haziz Dec 13 '12 at 7:14
  • 11
    @hobs it must be: echo "alias cls='clear'" >> ~/.bash_aliases && source ~/.bash_aliases – Amir Ali Akbari Aug 15 '13 at 10:30
  • 2
    ok so this topic is almost 7 years old now and I can't seem to find any recent answer like this. however it doesnt work for me anymore and asking now if something has changed – TheDefinitionist Oct 5 '16 at 13:00
39

Add your line into ~/.bashrc or into ~/.profile / ~/.bash_profile for remote logins.

If you want the command being executed for all users, put it into /etc/bash.bashrc.

Edit: In the latest versions of Ubuntu, ~/.bashrc automatically sources ~/.bash_aliases, so permanent aliases are best put into this file instead.

| improve this answer | |
  • Thanks, it worked when I wrote in ~/.bachrc P.S. There is no ~/.profiles in my home directory. – Zango Aug 6 '10 at 15:31
  • 1
    .profile might be .bash_profile now – txwikinger Aug 6 '10 at 15:32
  • If the file in question does not exist, you can simply create it. – Ryan C. Thompson Aug 6 '10 at 18:03
  • Thanks, I was wondering what's the difference between those two. (bashrc and bash_profile) – emf Oct 6 '10 at 20:28
  • 1
    joshstaiger.org/archives/2005/07/bash_profile_vs.html for the difference between ~/.bash_profile and ~/.bashrc – YouAreAwesome Jun 7 '16 at 8:12
19

You can add the function below to your .bashrc file.

function permalias () 
{ 
  alias "$*";
  echo alias "$*" >> ~/.bash_aliases
}

Then open a new terminal or run source ~/.bashrc in your current terminal. You can now create permanent aliases by using the permalias command, for example permalias cls=clear.

| improve this answer | |
  • 4
    Usage Note: when I typed mkalias smount='sudo mount' the quotes were not litterally echoed, so my solution was mkalias "smount='sudo mount'" If you are aliasing a 2+ word command you'll need this too. – TecBrat Jun 29 '13 at 22:04
  • I created a gist for this: gist.github.com/Masterxilo/f1967743fda3a1aded56ebaff4dd097b . Install permalias for the current user using { curl -s https://gist.githubusercontent.com/Masterxilo/f1967743fda3a1aded56ebaff4dd097b/raw/permalias | source /dev/stdin ; source ~/.bashrc ; } – masterxilo Nov 20 '18 at 20:34
  • However, I created permfunction, a more powerful alternative gist.github.com/Masterxilo/29ac0df083827bbd45a7c8ddcf3936d7 which creates globally installed scripts on the PATH instead. These will be available to all open sessions immediately and are much more flexible. Install using curl -s https://gist.githubusercontent.com/Masterxilo/29ac0df083827bbd45a7c8ddcf3936d7/raw/permfunction | sudo -E bash - ; hash -d permfunction &> /dev/null || true – masterxilo Nov 20 '18 at 20:36
5

See http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html for the difference between ~/.bash_profile and ~/.bashrc

~/.bashrc is run every time you open a new terminal, whereas ~/.bash_profile isn't. ~/.bashrc contains the following, which includes the ~/.bash_aliases file. This would be the most appropriate place to add your alias.

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
| improve this answer | |
4

Stick that command in the last line of your ~/.bash_profile

| improve this answer | |
  • 3
    Why not ~/.bashrc? – Michael Crenshaw Aug 6 '10 at 15:23
  • 2
    bashrc is preferred, I understand, though not clear on why – emf Oct 1 '10 at 18:46

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