J'ai défini le même chemin dans la variable $ PATH 6 fois.
Je ne me déconnectais pas pour vérifier si cela fonctionnait.
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 réinitialiser à juste
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Réponses:
Vous exécutez simplement:
ce serait pour la session en cours, si vous voulez changer de façon permanente, ajoutez-le à n'importe quel .bashrc, bash.bashrc, / etc / profile - tout ce qui convient à votre système et aux besoins de l'utilisateur.
Remarque: ceci est pour Linux. Nous allons clarifier cela pour les nouveaux codeurs. (`, ') N'essayez pas de SET = ces.
la source
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, vous souhaitez supprimer le répertoire
/home/wrong/dir/
de votrePATH
variable:la source
PATH=$(echo $PATH | sed -e 's|:/home/wrong/dir|$||')
echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'
) avant de l'assigner à PATH.$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 supprimer / scratch / sjn / anaconda / bin / pythonLinux From Scratch a cette fonction dans / etc / profile
Ceci est destiné à être utilisé avec ces fonctions pour ajouter au chemin, afin de ne pas le faire de manière redondante:
L'utilisation simple consiste simplement à donner
pathremove
le chemin du répertoire à supprimer - mais gardez à l'esprit qu'il doit correspondre exactement:Cela supprimera chaque instance de ce répertoire de votre chemin.
Si vous voulez le répertoire dans votre chemin, mais sans les redondances, vous pouvez simplement utiliser l'une des autres fonctions, par exemple - pour votre cas spécifique:
Mais, à moins que la lisibilité ne soit le problème, à ce stade, vous feriez mieux de simplement faire:
Est-ce que ce qui précède fonctionnerait dans toutes les coquilles connues de l'homme?
Je présume ci - dessus au travail
sh
,dash
etbash
au moins. Je serais surpris d'apprendre que cela ne fonctionne pas danscsh
,fish', or
ksh`. Je doute que cela fonctionne dans le shell de commande Windows ou Powershell.Si vous avez Python, le type de commande suivant devrait faire ce qui est directement demandé (c'est-à-dire supprimer les chemins redondants):
Une ligne unique (pour éviter les problèmes multilignes):
Ce qui précède supprime les chemins redondants ultérieurs. Pour supprimer les chemins redondants antérieurs, utilisez l'index d'une liste inversée et inversez-le à nouveau:
la source
${!PATHVARIABLE}
c'est une sorte d'indirection variable, mais je ne sais pas comment cela fonctionne ici. Pourriez-vous l'expliquer s'il vous plaît?local
builtin (qui ne peut être utilisé qu'à l'intérieur d'une fonction.) Si vous avez d'autres questions, vous devriez probablement poser une nouvelle question sur le site (après l'avoir recherchée d'abord pour vous assurer vous ne créez pas un duplicata exact ...).Voici un code d'une ligne qui nettoie le CHEMIN
Utilise
/bin/awk
pour que cela fonctionne même lorsque PATH est casséla source
echo $PATH
PATH= # pass new list of entries
la source
Si vous souhaitez simplement supprimer les chemins en double, j'utilise ce script que j'ai écrit il y a quelque temps car j'avais des problèmes avec plusieurs chemins perl5 / bin:
Et je l'ai mis dans mon ~ / .profile à la fin. Depuis que j'utilise BASH presque exclusivement, je ne l'ai pas essayé dans d'autres shells.
la source
|uniq
pour|sort|uniq
résoudre ce problème, mais cela changera l'ordre de tous les répertoires dans le chemin, ce que je ne pense pas être un effet secondaire souhaitable.En supposant que votre shell est Bash, vous pouvez définir le chemin avec
mais comme Levon l'a dit dans une autre réponse, dès que vous terminerez le shell, les changements disparaîtront. Vous souhaitez probablement configurer votre
PATH
in~/.bash_profile
ou~/.bashrc
.la source
Dans bash, vous pouvez simplement $ {var / find / replace}
Ou dans ce cas (car le bit de remplacement est vide) simplement:
Je suis venu ici en premier, mais je suis allé ailleurs car je pensais qu'il y aurait une expansion des paramètres pour le faire. Plus facile que sed !.
Comment remplacer un caractère ou un mot d'espace réservé dans une variable par la valeur d'une autre variable dans Bash?
la source
%
signifie match si à la fin de la chaîne,#
c'est pour le début.Il n’existe pas d’outils standard pour «modifier» la valeur de
$PATH
(c'est-à-dire "ajouter un dossier uniquement quand il n'existe pas déjà" ou "supprimer ce dossier").Pour vérifier quel serait le chemin lors de votre prochaine connexion, utilisez
telnet localhost
(outelnet 127.0.0.1
). Il vous demandera ensuite votre nom d'utilisateur et votre mot de passe.Cela vous donne un nouveau shell de connexion (c'est-à-dire un tout nouveau qui n'hérite de rien de l'environnement actuel).
Vous pouvez vérifier la valeur de
$PATH
là et modifier vos fichiers rc jusqu'à ce qu'il soit correct. Ceci est également utile pour voir si vous pouvez vous reconnecter après avoir modifié un fichier important.la source
/bin/bash -i
. Beaucoup moins de tracas.Comment avez-vous ajouté ces chemins en double à votre variable PATH? Vous devez avoir édité l'un de vos
.
fichiers. (.tcshrc
ou.bashrc
, etc. en fonction de votre système / shell particulier). La façon de résoudre ce problème est de modifier à nouveau le fichier et de supprimer les chemins en double.Si vous n'avez modifié aucun fichier et que vous devez avoir modifié le PATH de manière interactive. Dans ce cas, les modifications ne "colleront" pas, c'est-à-dire que si vous ouvrez un autre shell, ou si vous vous déconnectez et vous reconnectez, les modifications disparaîtront automatiquement.
Notez qu'il existe également des fichiers de configuration à l'échelle du système, mais il est peu probable que vous les ayez modifiés, il est donc fort probable que vous changiez des fichiers dans votre répertoire personnel (si vous souhaitez rendre ces modifications permanentes une fois que vous vous êtes installé sur un ensemble de chemins)
la source
Pour un modèle de copier-coller facile, j'utilise cet extrait de code Perl:
De cette façon, vous n'avez pas besoin d'échapper aux barres obliques pour l'opérateur de substitution.
la source