≡ Menu

Bash Shell Temporarily Disable an Alias

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 under a bash shell on a Linux or Unix-like systems?

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. It is also useful for creating your own commands on a Linux, OS X, FreeBSD, OpenBSD, Ubuntu/Debian/Red hat/CentOS/Fedora and Unix-like operating systems.

Display currently defined aliases

Type the following command:
$ alias
Sample outputs:

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

Another option is to type full command path:
$ /usr/bin/vnstat

But, how do I unalias permanently?

Update your shell configuration file like ~/.bashrc and remove required alias:
$ vi ~/.bashrc
$ unalias nameHere
$ unalias vnstat
$ source ~/.bashrc

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 21 comments… add one }
  • techfun March 13, 2009, 8:55 pm

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

  • nixCraft March 13, 2009, 9:04 pm

    Thanks for the heads up.

  • techfun March 13, 2009, 9:09 pm

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

  • Tim March 14, 2009, 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.

  • Topper March 14, 2009, 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

  • Michael Wagner March 14, 2009, 3:03 pm

    You can temporarily disable it via

    \

    or with the full pathname of the command.

    Michael

  • Michael Wagner March 14, 2009, 3:04 pm

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

  • Michael Wagner March 14, 2009, 3:06 pm

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

    Michael

  • Topper March 14, 2009, 7:43 pm

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

  • Michael Wagner March 14, 2009, 8:50 pm

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

  • Aditya March 15, 2009, 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?

  • Topper March 15, 2009, 8:45 am

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

    • Jeremy February 16, 2012, 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.

    • VoidFox June 24, 2015, 12:53 pm

      thanks just what i needed :>

  • Rory Browne March 16, 2009, 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.

  • Kristian April 14, 2009, 4:24 pm

    Doesn’t control-L clear the screen?

    • nixCraft April 14, 2009, 5:54 pm

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

  • Topper April 14, 2009, 5:46 pm

    Yes it is ?

  • Jeremy February 16, 2012, 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.

    • nixCraft February 16, 2012, 2:31 pm

      Use full path or \ syntax:

      # skip it
      /bin/cp -f foo bar
      # OR
      \cp -f foo bar
      
  • Harper December 20, 2016, 3:41 pm

    Can you add in the “Why this works” part? I get why an `unalias command` would make it run in an unaliased way but why does `\` make it run unaliased? What is it about BASH that accepts the `\command` shortcut?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: ,