PATH=$(tr ":" "\n" <<<"$PATH" | grep -Fxv "$HOME/mypython" | paste -sd:)
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
?
PATH=$(tr ":" "\n" <<<"$PATH" | grep -Fxv "$HOME/mypython" | paste -sd:)
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)
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
.
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
Eu mudaria seu .bashrc e então executaria o seguinte:
. .bashrc
Isso leva seu material .bashrc e o coloca em seu ambiente atual.
Tags bashrc