How to create a permanent "alias"?
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?
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
+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.
example: `echo "cls='clear'" >> ~/.bash_aliases && source ~/.bash_aliases`
@æ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.
@hobs it must be: `echo "alias cls='clear'" >> ~/.bash_aliases && source ~/.bash_aliases`
gracias for the correction
In Ubuntu 14.04, putting the aliases in a `~/.bash_aliases` doesn't seem to work, but there is this line instead: `test -s ~/.alias && . ~/.alias || true`. So it works if I put them in the `~/.alias` file!
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
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.Thanks, it worked when I wrote in ~/.bachrc P.S. There is no ~/.profiles in my home directory.
.profile might be .bash_profile now
If the file in question does not exist, you can simply create it.
Thanks, I was wondering what's the difference between those two. (bashrc and bash_profile)
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html for the difference between ~/.bash_profile and ~/.bashrc
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 thepermalias
command, for examplepermalias cls=clear
.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.
I created a gist for this: https://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 ; }`
However, I created permfunction, a more powerful alternative https://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`
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
Stick that command in the last line of your
~/.bash_profile
Why not `~/.bashrc`?
bashrc is preferred, I understand, though not clear on why
License under CC-BY-SA with attribution
Content dated before 6/26/2020 9:53 AM
loevborg 10 years ago
As for this particular example, ^L (Control-l) clears the screen as well.