17 votes

Comment supprimer un chemin du chemin du système (`$PATH`) en utilisant les commandes du terminal ?

J'ai ajouté un chemin de répertoire au chemin du système( $PATH ) en courant,

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

Maintenant mon chemin ressemble à ceci,

$ 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

Je veux supprimer /home/avinash/Desktop/raj à partir de la variable du chemin du système en utilisant la commande( comme la commande export le fait en ajoutant le chemin ).

23voto

Radu Rădeanu Points 156862

Dans votre Shell actuel (votre session actuelle de gnome-terminal), vous pouvez le faire en utilisant :

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

En général :

${string%substring}

supprime la correspondance la plus courte de $substring de arrière de $string .

Vérifiez Manipulation de chaînes de caractères pour plus d'informations.

18voto

Mufaka Points 54

Running export PATH=$PATH:/... ne règle pas votre PATH à l'échelle du système. C'est juste une variable Shell. Démarrez une nouvelle Shell et BOOM il est parti. Évidemment, si vous avez ajouté ça à ~/.bashrc (ou un autre fichier d'amorçage de l'environnement), vous devrez revenir sur cette modification, mais cela ne semble pas être votre problème ici.

Si vous êtes désespéré de ne pas démarrer un nouveau Shell, vous pourriez le régler en le supprimant manuellement, avec :

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

4voto

sourav c. Points 40637

Si vous mettez le export dans tout fichier d'initiation Shell comme suit ~/.bashrc vous pouvez utiliser les commandes suivantes dans le terminal,

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

Cela supprimera le dossier du chemin.

Si vous avez exporté le chemin à partir d'un terminal

Le dossier sera dans le chemin tant que vous serez dans ce Shell. Pour écraser le chemin, vous devez attribuer un nouveau chemin. Comme oli l'a déjà mentionné dans l'autre réponse.

Vous pouvez utiliser la commande suivante pour définir l'ancien chemin d'accès

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

Ou, tout simplement

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

Il s'agit d'un remplacement de sous-chaîne,

${string/substring/replacement}

4voto

c0rp Points 9110

Si vous voulez l'utiliser comme une commande, voici un petit 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

Nommez-le unexport et ajoutez-le à votre PATH.

Uso:

unexport /usr/local/bin /bin /sbin

Ce script ne change rien à votre réalité. PATH . Si vous voulez que script le fasse, vous devez changer la dernière ligne. Remplacez echo "export PATH=$PATH" a export PATH=$PATH

2voto

dirkvranckaert Points 1020

Un sale coup est

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. séparer chaque répertoire de votre PATH par ligne en utilisant tr
  2. supprimer ce que vous ne voulez pas (chemin correspondant à "raj") en utilisant grep -v et
  3. dans une longue chaîne de caractères délimitée par " :" en utilisant paste .

cela ne fonctionnera probablement pas bien si un répertoire dans PATH a : ou une nouvelle ligne

si vous vous retrouvez à faire cela souvent, pensez à en faire une fonction et à la sauvegarder dans votre profil Shell (ex. .bashrc , .zshrc )

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X