remove um caminho adicionado do PATH?

1

no meu ~/.bashrc no Linux, eu tenho uma linha que adiciona alguns caminhos para PATH , algo como:

PATH=~/mydoc:~/mypython:"$PATH"

A finalidade de adicionar ~/mypython é usar o python auto-instalado, em vez do padrão do sistema. Mas agora eu gostaria de voltar a usar o python padrão do sistema. Sem logout, existe uma maneira simples de remover ~/mypython do valor de PATH ?

    
por Tim 06.01.2016 / 02:02

5 respostas

4

PATH=$(tr ":" "\n" <<<"$PATH" | grep -Fxv "$HOME/mypython" | paste -sd:)
    
por 06.01.2016 / 03:12
2

Você pode atualizar seu caminho no shell:

TRIM=~/mypython
export PATH=$(echo "$PATH" | sed -e "s,:$TRIM:,:," -e "s,:$TRIM\$,," -e "s,^$TRIM:,," )

Isso é mais geral do que o seu caso específico. Isso poderia ser feito com

TRIM=~/mypython
export PATH=$(echo "$PATH" | sed -e "s,:$TRIM:,:," )

Eu usei uma variável temporária TRIM para armazenar o valor expandido de til ~/mypython porque isso não seria expandido no comando sed . Eu também fiz não usar $HOME porque (embora normalmente seja o mesmo) não é garantido que tenha o mesmo valor que a expansão de ~ (til). Você pode definir HOME para um diretório diferente do seu diretório pessoal real, conforme necessário (geralmente não é Boa Coisa , é claro).

Para meu próprio uso, eu uso um utilitário newpath , por exemplo,

export PATH=$(newpath -r ~/mypython)
    
por 06.01.2016 / 02:38
2

Aqui está uma função para remover um componente PATH que eu acho que lida com todos os casos de borda. (Mesmo os malvados com componentes vazios.)

remove_from_PATH () {
  while case $PATH in
          "$1") unset PATH; false;;
          "$1:"*) PATH=${PATH#"$1:"};;
          *":$1") PATH=${PATH%":$1"};;
          *":$1:"*) PATH=${PATH%%":$1:"*}:${PATH#*":$1:"};;
          *) false;;
        esac
  do
    :
  done
}

remove_from_PATH ~/mypython

No zsh, é mais fácil usar a matriz path .

path=("${(@)path:#"$HOME/mypython"}")

Observe que você não deve modificar PATH em .bashrc .

    
por 07.01.2016 / 03:28
1

Você pode configurar uma função para editar $PATH em um formato separado por linha no seu vi como se fosse um arquivo:

pathEdit(){ 
    export PATH="'printf '%s' "$PATH" |tr : '\n'|
    vipe | tr '\n' : |sed 's/:$//''"; 
}

Se você não tiver o vipe de moreutils , poderá emulá-lo com:

#!/bin/sh
set -e
st=0; tmpf=
tmpf="'mktemp'" && exec 3<>"$tmpf" || st="$?"
rm -f "$tmpf"
[ "$st" = 0 ] || exit "$st"
cat >&3
</dev/tty vi "$@" /dev/fd/3 >/dev/tty
cat /dev/fd/3
    
por 06.01.2016 / 03:14
-1

Eu mudaria seu .bashrc e então executaria o seguinte:

 . .bashrc

Isso leva seu material .bashrc e o coloca em seu ambiente atual.

    
por 06.01.2016 / 02:08

Tags