Kubuntu 14.10, .zshenv получен дважды

Я добавил некоторые каталоги в $PATH переменная в моем ~/.zshenv файл conf. После перезагрузки я заметил, что эти пути появляются дважды. Я попытался распечатать стеки вызовов и получил следующее:

.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

Так, второй в порядке, поскольку он был вызван путем открытия yakuake, где я проверял $PATH переменная. Но первый вызов не ясен для меня. Почему делает /etc/kde4/kdm/Xsession попытаться загрузить конфигурацию пользователя? Что является причиной и что является лучшим способом избежать $PATH дублирование?

Не предлагайте обходные решения как обертывание содержания .zshenv в проверки на первый показ (иначе включают защиту),

1
задан 12 November 2014 в 22:42

1 ответ

Хотя /etc/kde4/kdm/Xsession на самом деле используется для загрузки некоторых конфигураций оболочки пользователя, это на самом деле не загружается ~/.zshenv явно (хотя комментарий упоминает, что загружается). ~/.zshenv (а также /etc/zshenv) загружаются автоматически каждый раз a zsh запускает, это не может быть переопределено. И как /etc/kde4/kdm/Xsession выполняется с Вашей оболочкой входа в систему - в Вашем случае zsh - ~/.zshenv загружается также в независимо от того, чем на самом деле выполняют /etc/kde4/kdm/Xsession.

И /etc/kde4/kdm/Xsession попытки загрузить конфигурацию пользователя так, чтобы это было доступно программам, которые запущены через средства кроме оболочки командной строки (меню KDE, автоматический запуск, значок на рабочем столе, и т.д.).


Что касается предотвращения $PATH дублирование это должно добиться цели: Вместо того, чтобы использовать что-то как PATH=$PATH:/usr/local/bin:/my/path/here:/another/path, использовать

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

new_path массив путей, которые Вы хотите добавить. path версия массива PATH, это имеет то же содержание, но как фактический массив вместо разделенного от двоеточия списка. ${new_path:|path} заменен массивом элементов в new_path это уже не находится в path.

0
ответ дан 6 October 2019 в 20:39

Другие вопросы по тегам:

Похожие вопросы: