Como remover um caminho do caminho do sistema (`$ PATH`) usando comandos de terminal?

10

Adicionei um caminho de diretório ao caminho do sistema ( $PATH) executando,

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

Agora meu caminho fica assim,

$ echo $ PATH
/ usr / lib / lightdm / lightdm: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / jogos: / usr / local / games : / página inicial / avinash / Desktop / raj

Quero remover /home/avinash/Desktop/rajda variável de caminho do sistema usando o comando ( como o comando de exportação faz ao adicionar o caminho ).

Avinash Raj
fonte
onde você colocou a declaração de exportação?
souravc
terminal de gnomo (ctrl-alt-t)
Avinash Raj

Respostas:

14

A execução export PATH=$PATH:/...não define o PATHsistema inteiro. É apenas uma variável de shell. Inicie um novo shell e o BOOM se foi. Obviamente, se você adicionou isso a ~/.bashrc(ou outro arquivo de inicialização do ambiente), será necessário reverter essa alteração, mas não parece o seu problema aqui.

Se você está desesperado para não iniciar um novo shell, você pode configurá-lo removendo-o manualmente, com:

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Oli
fonte
11

No seu shell atual (sua sessão atual do gnome-terminal), você pode fazer isso usando:

export PATH=${PATH%:/home/avinash/Desktop/raj}

Em geral:

${string%substring}

exclui a correspondência mais curta de $substringde trás de $string.

Confira Manipulação de String para mais informações.

Radu Rădeanu
fonte
2

Se você quiser usá-lo como um comando, aqui está um pequeno 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

Nomeie-o unexporte adicione-o ao seu PATH.

Uso:

unexport /usr/local/bin /bin /sbin

Este script não altera o seu realmente PATH. Se você deseja que o script faça isso, altere a última linha. Substitua echo "export PATH=$PATH"porexport PATH=$PATH

c0rp
fonte
2

Se você colocar a exportinstrução em qualquer arquivo de iniciação do shell ~/.bashrc, poderá usar os seguintes comandos no terminal,

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

Isso removerá a pasta do caminho.

Se você exportou o caminho de um terminal

A pasta estará no caminho enquanto você estiver nesse shell. Para substituir o caminho, você deve atribuir um novo caminho. Como oli já mencionado na outra resposta.

Você pode usar o seguinte comando para definir o caminho antigo

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

Ou simplesmente

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

Esta é a substituição de substring,

${string/substring/replacement}
souravc
fonte
2

Um truque sujo é

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. separe cada diretório em seu PATH por linha usando tr
  2. remova o que você não deseja (caminho que corresponde a "raj") usando grep -ve
  3. recolher novamente em uma longa cadeia delimitada ":" usando paste.

isso provavelmente não funcionará bem se algum diretório do PATH tiver :ou uma nova linha

se você se encontra fazendo muito isso, considere torná-lo uma função e salvando em seu perfil de shell (por exemplo .bashrc, .zshrc)

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
Vai
fonte
1

export PATH=$PATH:/home/avinash/Desktop/raj (Aqui você adicionou o arquivo à variável de caminho.)

echo $PATH
Se você executar este comando, esta é a saída:

/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

Como você o remove do caminho? apenas execute

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

É um conceito de substituição de string.

$ export PATH=${string/substring/replacement}
Shalom Alexander
fonte
0

O comando interno do shell exportNão determina se uma variável está ou não definida, determina se a variável e seu valor também estão definidos nos subprocessos.

Alterar uma variável, exportada ou não, não afeta o processo pai ou acima, portanto, alterá-la em um script não tem efeito, a menos que esse script seja executado source.

Uma função shell:

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

cortará o último componente da variável PATH. Seu exportstatus não é afetado.

David Ledger
fonte
0

declare -x PATH = "/ desejado / caminho / você_quente" se não me engano, ele próprio atualizará o que você deseja e é completamente a seu pedido o que será. [Certifique-se de executar como root E como o usuário desejado para o qual você deseja que essa alteração seja afetada.] Para ter certeza, execute o ENV posteriormente para garantir que o $ PATH foi efetivamente alterado conforme desejado. (Isso é útil para alterar qualquer saída que você obterá quando executar '/ usr / bin / env'. Embora eu não saiba se é permanente ou não. A esse respeito, faça o que foi dito acima e altere ~ / .bashrc para grudar)

Jake Baldwin
fonte