226

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?

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

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
8
  • 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
  • 12
    @hobs it must be: echo "alias cls='clear'" >> ~/.bash_aliases && source ~/.bash_aliases 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 Oct 5 '16 at 13:00
46

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.

5
  • 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. 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 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.

3
  • 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
4

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

2
  • 3
    Why not ~/.bashrc? 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.