PATH устанавливается где-то, кроме launchd.conf, и я не знаю, где

Вопрос о том, как установить PATH для всех программ в сеансе пользователя (не только для терминала), возник и был решен. Поэтому я изменил и /etc/launchd.conf, и /etc/paths, просто чтобы убедиться, что все в порядке. Тем не менее, я по-прежнему получаю другую переменную PATH при запуске терминала, чем то, что я ожидаю (я совсем не уверен, как проверить PATH из другого приложения).

Вот что находится в /etc/launchd.conf:

setenv PATH /sw/bin:/sw/sbin:/sw/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin

Вот что в /etc/paths:

.
$HOME/bin
/sw/bin
/sw/sbin
/sw/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

Плюс пара файлов в /etc/paths.d/:

X11:

/usr/X11/bin

выбрать:

/opt/local/bin
/opt/local/sbin

Теперь, когда я запускаю новый терминал, я получаю следующее:

miishka:~ tamara$ echo $PATH
 /usr/bin:/bin:/usr/sbin:/sbin:.:/Users/tamara/bin:/sw/bin:/sw/sbin:/sw/local/bin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin
miishka:~ tamara$ 

Я проверил свои .bashrc и .bash_profile, у меня нет .profile, и я проверил /etc/profile и /etc/bashrc, и НИ ОДИН из них не касается envar PATH.

Я так озадачен.


person tamouse    schedule 02.07.2011    source источник
comment
Просто продолжение, учитывая различия между спецификацией пути в /etc/launchd.conf и /etc/paths, это больше похоже на то, что PATH создается из /etc/paths для терминала. Но мне все еще не ясно, почему они не создаются в указанном мной порядке.   -  person tamouse    schedule 02.07.2011


Ответы (1)


man path_helper

Эта штука сводила меня с ума. Я использую zsh и нашел его в /etc/zshenv.

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

Я думаю, что path_helper(8) на самом деле имеет полезную цель. Это сводится на нет обычной ультра расплывчатой ​​​​информацией о системном администраторе от Apple. ищите path_helper(8) в файле инициализации вашей оболочки, в /etc, даже если вы используете macports, как я. Это может помочь.

В противном случае вы можете попробовать установить среду в:

 /etc/launchd.conf

Но, конечно, справочная страница не является окончательной. http://developer.apple.com — отличная документация, но обычно мне нужны лучшие справочные страницы, а не точная память места.

Наконец, вы можете установить их в окне входа в систему, которое гласит:

 ~/.MacOSX/environment.plist

Теперь мне кажется странным иметь несколько способов сделать это, но... черт возьми, это странно. Они сделали достойную замену инициализации, это должен быть один процесс, который будет управлять ими всеми, но нет, многие задания выполняются за его пределами. Удачи. Вы должны быть в состоянии получить $VAR в свой графический интерфейс, используя один из этих методов.

А, http://developer.apple.com/library/mac/#qa/qa1067/_index.html.

OSX имеет различные сеансы и домены. Если быть точным, то из

 man launchctl

Сессии:

В настоящее время известны следующие типы сеансов: Aqua, LoginWindow, Background, StandardIO и System.

Домены:

Найдите файлы plist(5), оканчивающиеся на *.plist, в указанном домене. Допустимые домены включают «системный», «локальный», «сетевой» и «все».

Это имеет смысл, когда вы читаете это.

Фу. launchd всегда добирается до меня.

РЕДАКТИРОВАТЬ: https://serverfault.com/questions/16355/how-to-set-global-path-on-os-x/277034#277034

Снова утверждает, что /etc/launchd.conf — это место, где файлы получают путь.

Так что я побежал

 opensnoop -g -c -f /etc/launchd.conf

и открыл Терминал, итерм, сафари, брелок... нада. никто из них не открывал этот файл.

РЕДАКТИРОВАТЬ: Однако после просмотра видео в Google при запуске я побежал

 launchctl export 

который показал мне

PATH="/usr/bin:/bin:/usr/sbin:/sbin"; export PATH;
TMPDIR="/var/folders/YH/YHFe3+5RHmuxft5hr1XZTk+++TI/-Tmp-/"; export TMPDIR;
SHELL="/opt/local/bin/zsh"; export SHELL;
HOME="/Users/kb"; export HOME;
USER="kb"; export USER;
LOGNAME="kb"; export LOGNAME;
DISPLAY="/tmp/launch-dcQkBh/org.x:0"; export DISPLAY;
SSH_AUTH_SOCK="/tmp/launch-czhyqj/Listeners"; export SSH_AUTH_SOCK;
Apple_PubSub_Socket_Render="/tmp/launch-TI7lbI/Render"; export Apple_PubSub_Socket_Render;



sudo launchctl export 

который изменяет мой контекст на системный контекст вместо моего контекста Aqua в качестве пользователя, возвращенного

PATH="/usr/bin:/bin:/usr/sbin:/sbin"; export PATH;

Таким образом, контекст действительно имеет значение, другими словами, как и сеанс, в котором выполняется команда.

Документация для этого инструмента, этой замены инициализации, самого важного демона в Apple, единственного демона, который управляет ими всеми, ужасна. Моча. Бедных.

person chiggsy    schedule 21.07.2011
comment
Что ж, да, это имеет смысл, и это то, что было сказано ранее о том, как настроить PATH. Что для меня не имеет смысла, так это то, что порядок не тот, что установлен ни в /etc/launchd.conf, ни в /etc/paths + /etc/paths.d. Как видите, я настроил его через /etc/paths, переменная PATH должна быть следующей: .:$HOME/bin:/sw/bin:/sw/sbin:/sw /local/bin:/usr/bin:/bin:/usr/sbin:/sbin/:/usr/local/bin, но это не то, что я показал выше, с каталогами /usr/* первый . Если я просто запущу /usr/libexec/path_helper -s, он обнаружит перестановку. - person tamouse; 23.07.2011