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".
- add_path ajoutera l'entrée à la fin de la variable PATH
- pre_path ajoutera l'entrée au début de la variable PATH
- del_path supprimera l'entrée de la variable PATH, où qu'elle se trouve
Si vous spécifiez une variable comme second argument, il l'utilisera à la place de PATH.
Pour plus de commodité, les voici:
# is $1 missing from $2 (or PATH) ?
no_path() {
eval "case :\$${2-PATH}: in *:$1:*) return 1;; *) return 0;; esac"
}
# if $1 exists and is not in path, append it
add_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
}
# if $1 exists and is not in path, prepend it
pre_path () {
[ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
}
# if $1 is in path, remove it
del_path () {
no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
}
Si vous les ajoutez à votre fichier de démarrage bash, vous pouvez ajouter à votre PATH comme ceci:
pre_path $HOME/bin
add_path /sbin
add_path /usr/sbin
Ou spécifiez une variable différente:
pre_path $HOME/man MANPATH
pre_path $HOME/share/man MANPATH
add_path /usr/local/man MANPATH
add_path /usr/share/man MANPATH
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.
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
.