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

Вопрос о том, как установить PATH для всех программ в пользовательском сеансе (не только в терминале), уже решен. Поэтому я изменил оба пути /etc/launchd.conf и / etc / path, чтобы убедиться, что все в порядке. Тем не менее, я все еще получаю другой PATH envar при запуске Terminal, чем я ожидаю (я совсем не уверен, как протестировать 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.

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

1 Ответ

5 голосов
/ 21 июля 2011
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 на launchd я запустил

 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;

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

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

...