Come rimuovere un percorso dal percorso di sistema (`$ PATH`) usando i comandi del terminale?


10

Ho aggiunto un percorso di directory al percorso di sistema ( $PATH) eseguendo,

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

Ora il mio percorso è simile a questo,

$ echo $ PERCORSO
/ 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

Voglio rimuovere /home/avinash/Desktop/rajdalla variabile del percorso di sistema usando il comando ( come fa il comando export quando si aggiunge il percorso ).


dove hai messo la dichiarazione di esportazione?
souravc,

gnome terminal (ctrl + alt + t)
Avinash Raj,

Risposte:


14

La corsa export PATH=$PATH:/...non imposta il tuo PATHsistema. È solo una variabile di shell. Inizia una nuova shell e BOOM , non c'è più. Ovviamente se l'hai aggiunto a ~/.bashrc(o ad un altro file di bootstrap di ambiente) dovrai ripristinare quella modifica ma qui non suona come il tuo problema.

Se sei disperato di non avviare una nuova shell, puoi impostarla rimuovendola manualmente, con:

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

11

Nella tua shell corrente (la tua sessione corrente di gnome-terminal) puoi farlo usando:

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

In generale:

${string%substring}

eliminazioni più breve di $substringdalla parte posteriore della $string.

Controlla la manipolazione delle stringhe per ulteriori informazioni.


2

Se vuoi usarlo come comando, ecco un piccolo 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

Denominalo unexporte aggiungilo al PERCORSO.

Uso:

unexport /usr/local/bin /bin /sbin

Questo script non cambia il tuo in realtà PATH. Se vuoi che lo script lo faccia, dovresti cambiare l'ultima riga. Sostituire echo "export PATH=$PATH"aexport PATH=$PATH


2

Se inserisci l' exportistruzione in qualsiasi file di avvio della shell simile ~/.bashrc, puoi utilizzare i seguenti comandi nel terminale,

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

Rimuoverà la cartella dal percorso.

Se il percorso è stato esportato da un terminale

La cartella rimarrà nel percorso fintanto che sarai in quella shell. Per sovrascrivere il percorso devi assegnare un nuovo percorso. Come oli già menzionato nell'altra risposta.

È possibile utilizzare il comando seguente per impostare il vecchio percorso

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

O semplicemente

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

Questa è la sostituzione del sottostrato,

${string/substring/replacement}

2

Un trucco sporco è

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. separa ogni directory nel tuo PERCORSO per linea usando tr
  2. rimuovere ciò che non si desidera (percorso corrispondente "raj") utilizzando grep -ve
  3. comprimi di nuovo in una lunga stringa delimitata ":" utilizzando paste.

questo probabilmente non funzionerà bene se c'è qualche dir in PATH :o una nuova riga

se ti ritrovi a fare molto, considera di renderlo una funzione e salvarlo nel tuo profilo shell (ad es .bashrc. .zshrc)

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

1

export PATH=$PATH:/home/avinash/Desktop/raj (Qui hai aggiunto il file alla variabile path.)

echo $PATH
Se si esegue questo comando, questo è l'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

Come lo rimuovi dal percorso? basta eseguire

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

È un concetto di sostituzione delle stringhe.

$ export PATH=${string/substring/replacement}

0

Il comando incorporato della shell exportNon determina se è impostata o meno una variabile, determina se la variabile e il suo valore sono impostati anche in sottoprocessi.

La modifica di una variabile, esportata o meno, non influisce sul processo padre o superiore, pertanto la modifica in uno script non ha alcun effetto a meno che lo script non venga eseguito source.

Una funzione shell:

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

eliminerà l'ultimo componente della variabile PATH. Il suo exportstato non è interessato.


0

dichiarare -x PATH = "/ desiderata / path / you_want" se non sbaglio che si aggiornerà quello che vuoi ed è completamente a tuo piacimento quello che sarà. [Assicurati di eseguire come root E come l'utente desiderato per il quale desideri che questa modifica influisca] Per essere doppiamente sicuro, esegui ENV in seguito per assicurarti che $ PATH sia stato effettivamente modificato come desideri. (Questo è utilizzabile per alterare qualsiasi output che otterrai quando esegui '/ usr / bin / env'. Anche se non so se sia permanente o meno. A tale proposito, fai come detto sopra e modifica ~ / .bashrc per attaccare)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.