Supprimer des chemins redondants de variable $PATH
J'ai défini le même chemin dans la variable $PATH 6 fois.
Je n'ai pas de déconnexion pour vérifier si cela a fonctionné.
Comment puis-je supprimer les doublons?
La variable $PATH ressemble à ceci:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
Comment pourrais-je le remettre à juste
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- où avez-vous défini 6 fois? dans quels fichiers?
- double possible de Quelle est la façon la plus élégante pour supprimer un chemin dans la variable $PATH en Bash?
- Voir des entrées en Double dans $PATH un problème?
Vous devez vous connecter pour publier un commentaire.
Vous exécutez simplement:
ce serait pour la session en cours, si vous voulez changer de façon permanente ajouter à tout .bashrc, bash.bashrc, /etc/profile - ce que correspond à votre système et les besoins de l'utilisateur.
echo 'export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' >> ~/.bashrc
Si vous utilisez Bash, vous pouvez également effectuer les opérations suivantes si, disons que vous souhaitez supprimer le répertoire
/home/wrong/dir/
de votrePATH
variable:PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) avant de l'affecter CHEMIN.$PATH
. Utilisez celui-ci:PATH=$(echo :$PATH: | sed -e 's,:/home/wrong/dir:,:,g' -e 's/^://' -e 's/:$//')
$ PATH=
echo $PATH | sed -e 's/:\/scratch\/sjn\/anaconda\/bin\/python\/$//"` pour enlever /scratch/sjn/anaconda/bin/pythonSi vous avez besoin de supprimer un chemin d'accès de l'
PATH
variable avant de votre script s'exécute ajouter ceci au début du script:Si vous avez besoin, vous pouvez les ajouter de nouveau sur le devant de la liste:
Ou vous pouvez l'ajouter de nouveau à la fin de la liste avec:
Linux à Partir de rien a ce fonction dans /etc/profile
Ce qui est destiné à être utilisé avec ces fonctions pour ajouter de la voie, de sorte que vous ne le faites pas de manière redondante:
Simple d'utilisation est de donner
pathremove
le chemin du répertoire à supprimer - mais gardez à l'esprit qu'il doit correspondre exactement:Cela permettra d'éliminer de chaque instance de ce répertoire de votre chemin.
Si vous voulez le répertoire dans votre chemin, mais sans les licenciements, vous pouvez simplement utiliser l'une des autres fonctions, par exemple - pour votre cas spécifique:
Mais, à moins que la lisibilité est la préoccupation, à ce stade, vous êtes mieux de simplement faire:
Serait le travail ci-dessus dans toutes les coquilles connues de l'homme?
Je présume ci-dessus pour travailler dans
sh
,dash
, etbash
au moins. Je serais surpris d'apprendre qu'il ne fonctionne pas danscsh
,fish', or
ksh. Je doute que cela fonctionne dans Windows shell de commande ou de Powershell.Si vous avez le Python, le tri suivant de la commande doit faire ce qui est demandé directement (c'est-supprimer des chemins redondants):
Un one-liner (pour éviter multiligne questions):
Ci-dessus supprime plus tard, les chemins redondants. Pour supprimer des anciens chemins redondants, utiliser l'inversion de la liste de l'index et de l'inverser à nouveau:
${!PATHVARIABLE}
est une sorte de variable d'indirection, mais je ne suis pas sûr de savoir comment cela fonctionne ici. Pourriez vous m'expliquer s'il vous plaît ?local
builtin (qui ne peut être utilisé à l'intérieur d'une fonction.) Si vous avez d'autres questions, vous devriez probablement vous poser une nouvelle question sur le site (après avoir cherché d'abord à vous assurer que vous n'êtes pas créer une copie exacte...).Voici une ligne de code qui nettoie le CHEMIN
Utilise
/bin/awk
de sorte qu'il fonctionne même lorsque le CHEMIN est casséEn bash, vous ne peut tout simplement ${var/trouver/remplacer}
Ou dans ce cas (comme la remplacer bits est vide) juste:
Je suis venu ici pour la première fois, mais a d'autre ware comme je pensais qu'il y aurait un paramètre d'extension pour ce faire. Plus facile que sed!.
Comment remplacer un caractère réservé ou d'un mot dans une variable la valeur d'une autre variable en Bash?
%
moyens match si, à la fin de la chaîne,#
est pour le début.Si vous voulez simplement supprimer tous les doublons de chemins, j'utilise ce script que j'ai écrit un retour alors que depuis j'ai eu des problèmes avec plusieurs perl5/bin chemins:
Et je l'ai mis dans mon ~/.profil à la fin. Depuis que j'utilise BASH presque exclusivement, je n'ai pas essayé dans d'autres coquilles.
|uniq
à|sort|uniq
pour résoudre ce problème, mais cela va changer l'ordre de tous les répertoires dans le chemin que je ne pense pas souhaitable d'effets secondaires.Pour un simple copier-coller du modèle je l'utiliser Perl extrait de:
De cette façon, vous n'avez pas besoin d'échapper à la slashes pour l'opérateur de remplacement.
echo $PATH
PATH= # pass new list of entries
En supposant que votre shell est Bash, vous pouvez définir le chemin d'accès avec
mais comme Levon dit dans une autre réponse, dès que vous arrêtez le shell les modifications seront perdues. Vous voulez probablement configurer votre
PATH
dans~/.bash_profile
ou~/.bashrc
.Il n'y a pas d'outils standard pour modifier la valeur de
$PATH
(c'est à dire "ajouter un dossier uniquement lorsqu'il n'existe déjà" ou "supprimer ce dossier").Pour vérifier que le chemin serait lorsque vous vous connectez à la prochaine fois, l'utilisation
telnet localhost
(outelnet 127.0.0.1
). Il vous demandera votre nom d'utilisateur et mot de passe.Cela vous donne un nouveau shell de connexion (c'est à dire un tout nouveau, et qui n'héritent de l'environnement actuel).
Vous pouvez vérifier la valeur de la
$PATH
là et modifier vos fichiers rc jusqu'à ce qu'il est correct. C'est aussi utile pour voir si vous pouvez vous connecter à nouveau à tous après avoir modifié un fichier important./bin/bash -i
. Beaucoup moins de tracas.Comment avez-vous ajouter ces dupliquer les chemins d'accès à votre variable PATH? Vous devez avoir édité un de vos
.
fichiers. (.tcshrc
, ou.bashrc
, etc en fonction de votre système/shell). Le moyen pour résoudre ce problème est de modifier de nouveau le fichier et supprimer les doublons de chemins.Si vous n'a pas modifier tous les fichiers, et vous vous devez d'avoir modifié le CHEMIN d'accès de manière interactive. Dans ce cas, les modifications ne sont pas "coller", c'est à dire si vous ouvrez un autre shell, ou déconnectez-vous et reconnectez-vous, les changements disparaîtra automatiquement.
Remarque qu'il y a quelques échelle du système des fichiers de config, mais il est peu probable que vous avez modifié ces, donc plus vous aurez de chance de changer les fichiers dans votre répertoire home (si vous voulez faire ces changements permanents une fois que vous installer sur un ensemble de chemins)