How to remove a path from system path(`$PATH`) using terminal commands?
Solution 1:
In your current shell (your current session of gnome-terminal) you can do this using:
export PATH=${PATH%:/home/avinash/Desktop/raj}
In general:
${string%substring}
deletes shortest match of $substring
from back of $string
.
Check out String manipulation for more info.
Solution 2:
Running export PATH=$PATH:/...
doesn't set your PATH
system-wide. It's just a shell variable. Start a new shell and BOOM, it's gone. Obviously if you've added that to ~/.bashrc
(or another environment bootstrap file) you'll have to revert that change but it doesn't sound like your problem here.
If you're desperate not to start a new shell, you could set it by removing it manually, with:
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Solution 3:
If you want use it as a command, here is a little script:
#!/bin/bash
# This script removes folder from PATH variable
# Folders to remove reading as arguments
if [ $# -lt 1 ]; then
echo "You should give at least one argument"
echo "For example"
echo "$0 /usr/local/bin"
else
FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`
echo "You actually PATH variable is:"
echo $PATH
echo "###"
PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )
echo "Now you need to run"
echo "export PATH=$PATH"
fi
Name it unexport
, and add it to your PATH.
Usage:
unexport /usr/local/bin /bin /sbin
This script does not change your actually PATH
. If you want script to do it, you should change last line. Substitute echo "export PATH=$PATH"
to export PATH=$PATH
Solution 4:
If you put the export
statement in any shell initiation file like ~/.bashrc
, you can use the following commands in terminal,
#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc
It will remove the folder from path.
If you have exported the path from a terminal
The folder will be in path as long as you are in that shell. To overwrite the path you have to assign new path. As oli already mentioned in the other answer.
You can use the following command to set old path
export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`
Or, simply
export PATH=${PATH/':/home/avinash/Desktop/raj'/}
This is Substring Replacement,
${string/substring/replacement}
Solution 5:
One dirty hack is
export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
- separate each dir in your PATH by line using
tr
- remove what you don't want (path matching "raj") using
grep -v
, and - collapse back into a long ":" delimited string using
paste
.
this probably wont work well if any dir in PATH has :
or a new line
if you find yourself doing this a lot, consider making it a function and saving in your shell profile (e.g. .bashrc
,.zshrc
)
# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }