Je veux ajouter, dans ~ / .bashrc, quelques répertoires à mon $ PATH.
Mon $ PATH est assez long, il est donc un peu difficile de voir quels répertoires il contient et dans quel ordre.
Je sais que je peux modifier mon ~ / .bashrc pour être:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
cela rendrait la lecture plus facile. Mais je me demandais si au cours des dernières années, Bash avait acquis une syntaxe facilitant la spécification d’un long PATH. Par exemple, je fantasme sur une syntaxe semblable à:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Je sais qu'une telle syntaxe n'est pas valide. Je me demandais s'il y avait quelque chose d'aussi facile. Y a-t-il?
PATH=foo:$PATH
semble erronée , car elle à maintenir la croissance à chaque foissource ~/.bashrc
et mêmeexec bash
ne peuvent pas aider puisque le$PATH
estexport
.Réponses:
J'utilise un ensemble de fonctions pratiques pour ajouter ou ajouter un chemin à une variable. Les fonctions sont incluses dans l'archive de distribution pour Bash dans un fichier contrib appelé "pathfuncs".
Si vous spécifiez une variable comme second argument, il l'utilisera à la place de PATH.
Pour plus de commodité, les voici:
Si vous les ajoutez à votre fichier de démarrage bash, vous pouvez ajouter à votre PATH comme ceci:
Ou spécifiez une variable différente:
J'utilise cette méthode dans mes fichiers rc en plaçant les pre_paths en premier et les add_paths en second. Cela rend tous les changements de mon chemin faciles à comprendre en un coup d'œil. Un autre avantage est que les lignes sont suffisamment courtes pour que je puisse ajouter un commentaire de fin sur une ligne si nécessaire.
Et comme il s’agit de fonctions, vous pouvez les utiliser de manière interactive à partir de la ligne de commande, par exemple en ajoutant
add_path $(pwd)
d’ajouter le répertoire en cours au chemin.la source
del_path .
).OK, j’ai trouvé la solution suivante, qui me semble élégante (en ce qui concerne la syntaxe du shell). Il utilise la syntaxe de tableau de Bash et aussi un moyen astucieux de joindre des éléments:
ALERTE!
Il se trouve que cette solution a un problème : contrairement aux solutions de @terdon et @Starfish, elle ne vérifie pas d’abord si les chemins sont déjà dans PATH. Donc, puisque je veux mettre ce code dans ~ / .bashrc (et non dans ~ / .profile), les chemins en double seront insérés dans PATH. Donc n'utilisez pas cette solution (à moins que vous ne la mettiez dans ~ / .profile (ou, mieux, ~ / .bash_profile car elle a la syntaxe spécifique à Bash)).
la source
PATH
causer des problèmes de performances (en particulier parce que le shell met en cache les recherches réussies).J'utilise la fonction ci-dessous dans mon
~/.bashrc
. C'est quelque chose que j'ai reçu d'un administrateur système de mon ancien laboratoire mais je ne pense pas qu'il l'ait écrit. Ajoutez simplement ces lignes à votre~/.profile
ou~/.bashrc
:Cela présente divers avantages:
$PATH
est trivial:pathmunge /foo/bar
;pathmunge /foo/bar
ou à la fin (pathmunge /foo/bar
après) du$PATH
.Le fichier d'initialisation de votre shell contiendrait alors quelque chose comme:
la source
grep
.eval
fichier afin que vous puissiez causer des dommages sérieux si vous l'exécutez avec le mauvais argument.grep
, voir bugzilla.redhat.com/show_bug.cgi?id=544652#c7Je veux ajouter, dans ~ / .bashrc, quelques répertoires à mon $ PATH.
J'utilise ce qui suit dans Cygwin. Cela devrait fonctionner dans d'autres versions de bash. Vous pouvez supprimer le
unset PATH
pour construire sur votre courantPATH
(si vous faites cela, vous devrez peut-être savoir comment ajouter les:
séparateurs correctement).Remarque:
bash
fonction, mais je l'ai perdue après un crash de disque.Dans mon
.bash_profile
:...
Dans
~/.path_elements
:la source
J'utilise ceci dans mon .bashrc (et aussi mon .zshrc, puisque j'utilise typiquement zsh lorsqu'il est disponible au lieu de bash). Certes, il me faut ajouter manuellement des répertoires, mais un avantage est que, lors de la mise à jour, je peux continuer à le copier sur de nouveaux serveurs sans me soucier du PATH sur un nouveau serveur créé avec des répertoires qui n'existent pas.
Je fais la même chose pour mon MANPATH:
En plus d'avoir un seul fichier que je peux copier sur des systèmes dans des environnements disparates sans craindre d'ajouter des répertoires inexistants à PATH, cette approche a également l'avantage de me permettre de spécifier l'ordre dans lequel je veux que les répertoires apparaissent dans PATH. Comme la première ligne de chaque définition redéfinit complètement la variable PATH, je peux mettre à jour mon fichier .bashrc et le rechercher après la modification pour mettre à jour mon shell sans ajouter d'entrées en double (ce que j'avais l'habitude de connaître il y a longtemps " $ PATH = $ PATH: / new / dir ". Cela me permet d’obtenir une copie vierge dans l’ordre que je désire.
la source
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
il sera plus court et plus facile d'ajouter un nouveau répertoire (il suffit de copier une ligne et d'éditer la première partie "d = ...."). Cependant, dans le cas de PATH, je pense que vous allez vous retrouver avec beaucoup trop de répertoires dans votre PATH, ce qui n’est pas toujours bon (que se passe-t-il si une commande "foo" existe dans l’un des chemins les moins connus et fait quelque chose de complètement différent qu'attend un utilisateur régulier?)Il y a un moyen facile! Lire les fonctions du shell et les variables de chemin d'accès dans Linux Journal , 1 mars 2000 Par Stephen Collyer
Les fonctions me permettent d’utiliser un nouveau type de données dans mon environnement bash - la liste séparée par des deux-points. En plus de PATH, je les utilise pour ajuster mon LOCATE_PATH, MANPATH et d’autres, ainsi qu’en tant que type de données général dans la programmation bash. Voici comment configurer mon PATH (en utilisant les fonctions):
Étant donné que le lien Linux Journal est appelé "rompu", j'ai placé les fonctions de chemin d'accès Bash dans un fichier .shar à l'adresse http://pastebin.ubuntu.com/13299528/
la source