Bash Shell Temporarily Disable an Alias

by on March 13, 2009 · 19 comments· LAST UPDATED March 13, 2009

in , ,

I've couple of shell aliases defined in ~/.bashrc file. How do I temporarily remove (disable) a shell alias and call the core command directly without using unalias command?

An alias command enables a replacement of a word with another string. It is mainly used for abbreviating a system command, or for adding default arguments to a regularly used command.

Display currently defined aliases

Type the following command:
$ alias
Sample output:

alias cp='cp -i'
alias dnstop='dnstop -l 5  eth1'
alias grep='grep --color'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias update='yum update'
alias updatey='yum -y update'
alias vi='vim'
alias vnstat='vnstat -i eth1'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
alias vnstat='vnstat -i eth1'

Creating an alias

Create an alias called c for the commonly used clear command, which clear the screen:
$ alias c='clear'
Then, to clear the screen, instead of typing clear, the user would only have to type the letter c and press the [ENTER] key:
$ c

How do I disabled alias temporarily?

An alias can be disabled temporarily and the core command get called directly. Just prefix command with a backslash. Create an alias called vnstat:
$ alias vnstat='vnstat -i eth1'
$ vnstat

Sample output:

Database updated: Fri Mar 13 15:30:01 2009
	eth1
	   received:     158.48 GB (20.9%)
	transmitted:     599.82 GB (79.1%)
	      total:     758.30 GB
	                rx     |     tx     |  total
	-----------------------+------------+-----------
	yesterday      2.83 GB |   10.90 GB |   13.73 GB
	    today      1.92 GB |    7.31 GB |    9.23 GB
	-----------------------+------------+-----------
	estimated      2.97 GB |   11.28 GB |   14.25 GB

Now disabled vnstat alias temporarily, enter:
$ \vnstat
Sample output:

                     rx      /     tx      /    total    /  estimated
 eth1:
     yesterday      2.83 GB  /   10.90 GB  /   13.73 GB
         today      1.92 GB  /    7.31 GB  /    9.23 GB  /   14.24 GB
 eth0:
     yesterday    655.05 MB  /    2.02 GB  /    2.66 GB
         today    438.01 MB  /    1.43 GB  /    1.86 GB  /    2.86 GB
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 19 comments… read them below or add one }

1 techfun March 13, 2009 at 8:55 pm

When you said:
alias p='clear'
I think you meant:
alias c='clear'

Reply

2 nixCraft March 13, 2009 at 9:04 pm

Thanks for the heads up.

Reply

3 techfun March 13, 2009 at 9:09 pm

No problem, I do that kind of thing all the time myself. :)

Reply

4 Tim March 14, 2009 at 10:48 am

You can also use `command’. If you have ls aliased to `ls -lh’, command ls will run the ls command as if there was no alias.

Reply

5 Topper March 14, 2009 at 11:24 am

Also, you can see all the aliases from .bashrc or .bashcompletition or something else with
# alias TAB
This will list all the aliases

Reply

6 Michael Wagner March 14, 2009 at 3:03 pm

You can temporarily disable it via

\

or with the full pathname of the command.

Michael

Reply

7 Michael Wagner March 14, 2009 at 3:04 pm

Sorry, the output was not correct. You can put an \ before the alias.

Reply

8 Michael Wagner March 14, 2009 at 3:06 pm

Sorry, the output was not correct. You can disable it when you put a \ before the alias.

Michael

Reply

9 Topper March 14, 2009 at 7:43 pm

Exactly – this was the meaning of author’s post! Did you read it ?

Reply

10 Michael Wagner March 14, 2009 at 8:50 pm

Yes I read the post but I thought it was a question not a statement. Sorry for the misunderstanding.

Reply

11 Aditya March 15, 2009 at 6:42 am

How about unaliasing?
say I’ve a few aliases defined in my ~/.bashrc and ls is one of them:
alias ls=’ls -alhF’

so on prompt to disable it temporarily I will say:

> unalias ls

and done……how about this solution?

Reply

12 Topper March 15, 2009 at 8:45 am

unalias [-a] [name ...]
Remove each name from the list of defined aliases
I think that will be removed permanently.

Reply

13 Jeremy February 16, 2012 at 2:14 pm

yes and no. IT does remove it permanently, however, the alias is normally generated from the .bashrc or some other file that is read in during login or opening a new terminal. So technically it is not removed permanently unless the alias commands are removed from those files as well.

Reply

14 Rory Browne March 16, 2009 at 12:11 pm

There seem to be some useful tips here – I usually do something like /bin/rm to avoid the rm -i alias. Of course you can always use the -f argument with cancels out -i.

Another thing you could do ( if you wanted to use an unedited version of the command ) would be to start up a sub-shell.

Something along the lines of……

bash
unalias ls
ls
exit

When you exit back out to the parent shell, your unalias is forgotten.

Reply

15 Kristian April 14, 2009 at 4:24 pm

Doesn’t control-L clear the screen?

Reply

16 nixCraft April 14, 2009 at 5:54 pm

This is not about clearing screen. It is about disabling aliases.

Reply

17 Topper April 14, 2009 at 5:46 pm

Yes it is ?

Reply

18 Jeremy February 16, 2012 at 2:10 pm

Although -f cancels out the -i for rm, it does not for cp. I found this page looking for a way to temporarily disable an alias because the -f isn’t working. The script will run, but the new file is not copying over the old one. During testing, I notice its because the -f I put on the command is not actually canceling out the alias which uses the -i and its still prompting for confirmation to move the file over.

Reply

19 nixCraft February 16, 2012 at 2:31 pm

Use full path or \ syntax:

# skip it
/bin/cp -f foo bar
# OR
\cp -f foo bar

Reply

Leave a Comment

Tagged as: , , , , , ,

Previous Faq:

Next Faq: