Моя оболочка zsh, а OS - Ubuntu 13.04
Мне нужно добавить каталог в $ PATH, чтобы он работал в следующих местах:
В графической среде (Unity) (например, запущенные приложения, программа gmrun, работающая по ярлыку (это в основном как «команда запуска» на alt + f2). В терминале в Unity In терминал на Ctrl + Alt + F1Я добавил он в .profile, и он работает для первых двух точек, но не для последнего. Я знаю, что могу добавить его к .zshrc, но в этом случае он будет записан в местах буксировки (нарушает DRY), а в случае терминала внутри единство будет два раза в $PATH (я не думаю, что это очень плохо, но это по крайней мере не очень)
Если я добавлю его только в .zshrc, он работает только для второго и третьего (очевидно)
Что я могу сделать?
лучший способ заключается в использовании [Ф4]. Например, чтобы добавить [F5], чтобы в конце ваш [ф6], вы бы положить это в файл [ф7] в вашем домашнем каталоге:
[Ф1]если вы хотите что-то добавить к нажать [F8] для всех пользователей, с помощью [F9] и вместо. К сожалению, [ф10] и на [F11] не используйте тот же синтаксис. Пока ни на самом деле сценарий, [ф12] выглядит как сценарий (без каких-либо [от f13] команды). Поэтому, если ты хотел добавить [ф14] до конца все [ф15], а линия [ф16] в [f17 в] началось
[Ф2]тогда бы вы изменить его на:
[Ф3]большинство Борна-стиль раковин, в том числе [ф18], источник [зг19], когда они начали в качестве регистрационной оболочки. [20 фунтов] представляет собой необычное исключение; он сделает это, если он вызывается с именем одного из традиционных Борна-стиль раковины. То есть, если вы все пользователи [клавиши f21] по имени [ф22] или [ф23] (наиболее часто достигается путем создания символической ссылки в [ф24] с одним из этих имен), он будет вести себя как им и источник [f25 привод датчика] (если это логин оболочки). В противном случае, его не будет. (Источник: [ф6].)
вот почему zsh в виртуальной консоли (например, когда вы идете на Ctrl+АЛТ+Ф1) не установить переменную [ф28] среды ~/.profile. Это оболочка, но [f30 с] - особое, оно не ведет себя как традиционный Борна-стиль раковины, если она притворяется.
почему [ф31] запуск окна терминала есть переменные окружения, установленные в [f32 из]? Потому что они уже были установлены в графический сеанс, прежде чем запустил терминал. Когда вы входите в систему графически отобразить диспетчере (которых обеспечивает графический экран входа в систему и управляет графический сеансов) без. Как правило, это источники ~/.profile (хотя не гарантируется, что он будет делать так, и иногда кто-то меняет окружение рабочего стола, только чтобы найти, что ~/.profile больше не поступает при входе в систему графически).
нет ничего о тексте на основе виртуальных консолей, что делает [ф35] вам не получены. Например, если ваша оболочка были [f36 в] вместо [фунции f37] и вы вошли в виртуальную консоль, ~/.profile будут получены. Вопрос в том, что в отличие от надежного поведения традиционного Борна-стиль оболочки, и не совсем надежным поведения менеджера дисплее, начиная с графического сеанса, [f39 расстройства] не источник [ф40] когда это ваша оболочка.
аналогично, с переменными окружения в [ф41], если вы должны были войти в систему удаленно (например, путем включения SSH и вход в ту сторону), ~/.profile не быть получены.
это относится к глобальному файл /etc/profile тоже, кстати. Если у вас есть набор переменных среды во всем мире, вы будете испытывать такое же поведение вы видите, установка переменных среды пользователя в [пулемет f44].
решение, использовать [Ф4]., является установка пользовательских переменных среды в [f45 С] и системной (т. е. для всех пользователей) переменные среды в /etc/environment.
этот способ решает проблему некоторые снаряды логин не всегда источники [ф50] и /etc/profile (это проблема, с которой вы столкнулись). Он также решает иногда проблему диспетчере отображения не рентабельные файл, так как он инициализирует графический сеанса (это проблема, с которой вы не испытываете).
а что если:
вам нужно установить переменные окружения при входе в систему, на основе результатов тестовых скриптов? Или вы просто не хотите использовать .pam_environment (или для всей системы переменных, /etc/environment? [dрайвер d41]если Вы не используете zsh, но [f55, которая] или еще более традиционный Борна-стиль Shell, то вы могли бы просто установить переменные окружения в ~/.profile (или /etc/profile для общесистемных переменных). По повод есть конфигурации, где это не установлено им для графических сеансов входа в систему, но обычно это работает.[!dрайвер d41]их ~/.bashrc не. По сути, только bash источники этого файла, поэтому он будет работать ни когда [от f60] ваша оболочка, ни когда диспетчер дисплей выступает в качестве оболочки входа в систему. (Другими словами, в вашей ситуации, что никогда не будет работать на всех.)
таким образом, если вам нужен скрипт, который поступает по всем видам логин, и [ф61], источником для ваших графических сессий, можно просто:
вам нужно установить переменные окружения при входе в систему, на основе результатов тестовых скриптов? Или оба [64-го фокуса]'конфигурации S и [f65 в] источник третий, общий файл. (Это может даже быть добавлены в отдельный конфигурационный файл для графики сессий, таких как .xsession, если это оказалось необходимо позже.)из этих двух вариантов второй лучше, если ты просмотрел содержимое ~/.профильand made sure they--and the contents of any script sourced from.профиль[f68 не]ЗШ`. (Это, как правило, не должны, но вы никогда не знаете.)
лучшие конфигурационный файл для изменения, чтобы сделать zsh источник [р70] (или другой скрипт) на логин, это ~/.zprofile. Это соответствует ~/.profile на более традиционные Борна-стиль раковины. (Строго говоря, это $ZDOTDIR/.zprofile, но $ZDOTDIR обычно [f75 в Джей].)
нужно добавить строку source $HOME/.profile к этому файлу.
я подчеркиваю, однако, что если просто нужно выполнять простые задание переменных среды (в том числе рекурсивное задание, где переменные среды присваивается выражение, содержащее себя и/или других переменных окружения), вы должны просто использовать [f77 на английском языке] как описано выше (или /etc/environment на системную "переменные среды").
Прежде всего, вы можете просто указать свой .profile в вашем файле .zshrc.
Кроме того, поскольку вы используете zsh, вы можете добавить следующее к своему .zshrc: [!d1 ]
typeset -U path
# If you want it at the front of your path
path=({/custom/path/bin "${path[@]}")
# If you want it at the end of your path
path+=(/custom/path/bin)
Как это работает:
В zsh переменная $PATH привязана к переменной $path; $path - массив, а $PATH - скаляр с элементами $path, соединенными : (идентичными ${(j|:|)path}). typeset -U path делает элементы массива path уникальными.
typeset [ {+|-}AEFHUafghklprtuxmz ] [ -LRZi [ n ]] [ name[=value] ... ]
typeset -T [ {+|-}Urux ] [ -LRZ [ n ]] SCALAR[=value] array [ sep ]
Set or display attributes and values for shell parameters.
(...)
-U For arrays (but not for associative arrays), keep only
the first occurrence of each duplicated value. This may
also be set for colon-separated special parameters like
PATH or FIGNORE, etc. This flag has a different meaning
when used with -f; see below.