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

3

Eu adicionei um caminho de diretório ao caminho do sistema ( $PATH ) executando

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

Agora meu caminho é assim,

$ 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

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

    
por Avinash Raj 12.03.2014 / 18:45

5 respostas

7

A execução de export PATH=$PATH:/... não define seu PATH em todo o sistema. É apenas uma variável shell. Inicie um novo shell e BOOM , ele desapareceu. Obviamente, se você adicionou isso ao ~/.bashrc (ou outro arquivo de bootstrap do ambiente), você terá que reverter essa mudança, mas não parece o seu problema aqui.

Se você estiver desesperado para não iniciar um novo shell, poderá defini-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
    
por Oli 12.03.2014 / 18:53
6

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 $substring de anterior de $string .

Confira manipulação de string para mais informações.

    
por Radu Rădeanu 12.03.2014 / 19:20
2

Um hack sujo é

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. separe cada dir no seu PATH por linha usando tr
  2. remova o que você não deseja (correspondência de caminho "raj") usando grep -v e
  3. recolher de volta uma string longa ":" delimitada usando paste .

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

Se você estiver fazendo muito isso, considere torná-lo uma função e economize 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: )"; }
    
por Will 08.10.2017 / 19:00
1

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 com unexport e adicione-o ao seu PATH.

Uso:

unexport /usr/local/bin /bin /sbin

Este script não altera seu PATH . Se você quiser que o script faça isso, você deve alterar a última linha. Substitua echo "export PATH=$PATH" a export PATH=$PATH

    
por c0rp 12.03.2014 / 19:29
1

Se você colocar a instrução export em qualquer arquivo de iniciação do shell como ~/.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

Ele removerá a pasta do caminho.

Se você exportou o caminho de um terminal

A pasta estará no caminho enquanto você estiver nesse shell. Para sobrescrever o caminho, você deve atribuir um novo caminho. Como 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 substrato,

${string/substring/replacement}
    
por souravc 12.03.2014 / 19:06