Bash Shell Temporarily Disable an Alias

Posted on in Categories , , , , , , , , , last updated June 24, 2015

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

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

21 comment

  1. 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.

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

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

    Michael

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

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

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

    1. 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.

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

  8. 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.

  9. 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?

Comments are closed.