10

I added a directory path to system path($PATH) by running,

export PATH=$PATH:/home/avinash/Desktop/raj

Now my path look like this,

$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

I want to remove /home/avinash/Desktop/raj from system path variable by using command(like export command does on adding path).

  • where did you put the export statement? – souravc Mar 12 '14 at 17:50
  • gnome terminal(ctrl+alt+t) – Avinash Raj Mar 12 '14 at 17:52
15

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
| improve this answer | |
15

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.

| improve this answer | |
2

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

| improve this answer | |
2

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}
| improve this answer | |
2

One dirty hack is

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. separate each dir in your PATH by line using tr
  2. remove what you don't want (path matching "raj") using grep -v, and
  3. 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: )"; }
| improve this answer | |
1

export PATH=$PATH:/home/avinash/Desktop/raj (Here you have added the file to the path variable.)

echo $PATH
If you execute this command, This is the output:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

How do you remove it from the path? just execute

$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}

It is a concept of string replacement.

$ export PATH=${string/substring/replacement}
| improve this answer | |
0

The shell builtin command export Doesn't determine whether or not a variable is set, it determines if the variable and its value are also set in sub-processes.

Changing a variable, exported or not, does not affect the parent process or above, so changing it in a script has no effect unless that script is run with source.

A shell function:

function trimpath {
    PATH=${PATH%:*}
}

will trim off the last component of the PATH variable. Its export status is unaffected.

| improve this answer | |
0

declare -x PATH="/desired/path/you_want" if I'm not mistaken that itself will update what you want and it's completely at your behest what it will be. [Make sure you run as root AND as the desired user for which you want this change to affect] To be double sure, run ENV afterwards to make sure that the $PATH was effectively altered as you want. (This is usable for altering any of the output you will get when you run '/usr/bin/env'. Although I dont know whether or not it is permanent. In that respect do as stated above and alter ~/.bashrc for it to stick)

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.