J'utilise Ubuntu 9.10 (karmique). Et, mon ~/.pam_environment
ressemble à ce qui suit.
PATH DEFAULT=${PATH}:~/Adobe/Reader9/bin:~/texlive/2009/bin/x86_64-linux GIT_EDITOR DEFAULT=vim MANPATH DEFAULT=${MANPATH}:~/texlive/2009/texmf/doc/man INFOPATH DEFAULT=${INFOPATH}:~/texlive/2009/texmf/doc/info
Mais, echo $PATH
renvoie les entrées dupliquées comme suit.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/Adobe/Reader9/bin:~/texlive/2009/bin/x86_64-linux:~/Adobe/Reader9/bin:~/texlive/2009/bin/x86_64-linux
J'ai essayé de remplacer DEFAULT
par OVERRIDE
dans mon fichier ~/.pam_environment
. Mais cela n'a pas aidé.
Est-ce que quelqu'un sait ce qui ne va pas avec mon ~/.pam_environment
?
Le problème semble résulter du fait que pam_env
est par défaut la lecture de l'utilisateur ~/.pam_environment
chaque fois qu'il est invoqué. Beaucoup de méthodes de connexion (cron, lightdm, lightdm-autologin, login, sshd et su sur ma machine) invoquent pam_env
deux fois: une fois pour lire les fichiers /etc/environment
et ~/.pam_environment
et une fois pour lire le /etc/default/locale
Fichier /etc/default/locale
. Dans aucun des deux cas, le drapeau user_readenv
défini, donc pam_env
lit et agit sur votre ~/.pam_environment
deux fois.
Pour résoudre ce problème, accédez à votre répertoire /etc/pam.d
et ajoutez ce qui suit à chaque ligne dans laquelle pam_env
est invoqué avec l' envfile=/etc/default/locale
:
user_readenv=0
Vérifiez votre /etc/pam.d/
que pam_env.so
n'est pas chargé deux fois, par exemple, tant dans session
qu'en auth
.
Pas une réponse, exactement, mais peut-être utile à d'autres qui ont des problèmes de duplication
À partir de la réponse d'acceptation que j'ai reçue à partir de Stack Overflow: Comment puis-je manipuler les éléments $ PATH dans les scripts shell? J'ai développé un ensemble légèrement grand d'outils. La plupart du crédit ici devrait aller à Jonathan Leffler qui a fourni le modèle que j'ai utilisé en les écrivant.
# Insure that a path element exists by adding it to the end if it does not # # $1 name of the shell variable to set (eg PATH) # $3 the path element that we want to insure exists function insure_path () { local path=$1 local list=$(eval echo '$'$path) local pat=$2 checkstr=$(echo "$list" | tr ":" "\n" | grep -Fm 1 "$pat") if [ "$checkstr" ] then true else export $path=$(echo $list:$pat | sed -e 's|\(:\):*|\1|g' -e 's|:$||' -e' s|^:||') fi } # Insure that a path element exists by adding it to the front if it does not # # $1 name of the shell variable to set (eg PATH) # $2 the path element that we want to insure exists function insure_path_front () { local path=$1 local list=$(eval echo '$'$path) local pat=$2 checkstr=$(echo "$list" | tr ":" "\n" | grep -Fm 1 "$pat") if [ $checkstr ] then true else export $path=$(echo $pat:$list | sed -e 's|\(:\):*|\1|g' -e 's|:$||' -e' s|^:||') fi }
# Remove duplicates from a path. Preferes the ealiest instance of each # duplicate because this preserves the semantics of the existing path # # $1 name of the shell variable to set (eg PATH) function unduplicate_path () { local path=$1 local list=$(eval echo '$'$path) local split_list=$(echo "$list" | tr ":" " ") local tempp="" # Build the new version of $path from scrath for p in $split_list do insure_path_back tempp $p done # Now replace the existing version export $path=$tempp }