1 votes

Kubuntu 14.10, .zshenv a une source double

J'ai ajouté quelques répertoires dans $PATH dans mon ~/.zshenv conf. Après le redémarrage, j'ai remarqué que ces chemins apparaissent deux fois. J'ai essayé d'imprimer les piles d'appels et j'ai obtenu ce qui suit :

.zshenv sourced by
18385:/bin/zsh /etc/kde4/kdm/Xsession /usr/bin/startkde
 2158:  -:0
 1438:    kdm
    1:      /sbin/init

.zshenv sourced by
22143:/bin/zsh
20858:  /usr/bin/yakuake -session 10d5e3636b000141388223100000058160027_1415750006_832059
18385:    upstart --user
 2158:      -:0
 1438:        kdm
    1:          /sbin/init

Donc, le deuxième est correct, car il a été causé par l'ouverture de yakuake, où je vérifiais $PATH variable. Mais le premier appel n'est pas clair pour moi. Pourquoi /etc/kde4/kdm/Xsession essayer de charger la configuration de l'utilisateur ? Quelle en est la raison et quel est le meilleur moyen d'éviter que cette situation ne se produise ? $PATH duplication ?

S'il vous plaît, ne suggérez pas de solutions de contournement telles que l'enveloppement du contenu de la rubrique .zshenv dans les contrôles pour la première exécution (aka inclure les gardes)

1voto

Adaephon Points 4529

Bien que /etc/kde4/kdm/Xsession est en fait utilisé pour charger certaines des configurations Shell de l'utilisateur, il fait en réalité no charge ~/.zshenv explicitement (bien qu'un commentaire mentionne qu'il est chargé). ~/.zshenv (ainsi que /etc/zshenv ) sont chargées automatiquement chaque fois qu'une zsh ne peut être remplacée. Et comme /etc/kde4/kdm/Xsession est exécuté avec votre login Shell - dans votre cas zsh - ~/.zshenv est chargé, aussi, peu importe ce qui est fait en réalité en /etc/kde4/kdm/Xsession .

Et /etc/kde4/kdm/Xsession essaie de charger la configuration de l'utilisateur afin qu'elle soit disponible pour les programmes qui sont lancés par d'autres moyens que la ligne de commande Shell (menu KDE, démarrage automatique, icône du bureau, etc.)


Quant à la prévention $PATH cette duplication devrait faire l'affaire : au lieu d'utiliser quelque chose comme PATH=$PATH:/usr/local/bin:/my/path/here:/another/path utiliser

new_paths=(/usr/local/bin /my/path/here /another/path)
path=($path ${new_path:|path})

new_path est un tableau des chemins que vous voulez ajouter. path est la version tableau de PATH il a le même contenu mais sous forme de tableau au lieu d'une liste séparée par deux points. ${new_path:|path} est substitué par un tableau des éléments de new_path qui ne sont pas déjà dans path .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X