2

ユーザー セッション内のすべてのプログラム (ターミナルだけでなく) に PATH を設定する方法の問題が発生し、解決されました。そのため、すべてが正常であることを確認するために、/etc/launchd.conf と /etc/paths の両方を変更しました。ただし、ターミナルを起動すると、期待していたものとは異なる PATH envar が引き続き取得されます (別のアプリケーションから 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 を確認しましたが、いずれも PATH envar に触れていません。

私はとても困惑しています。

4

1 に答える 1

4
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 からの通常の非常にあいまいな sysadmin 情報によって否定されます。私のように macports を使用している場合でも、シェルの init ファイルの /etc で path_helper(8) を探してください。それは役立つかもしれません。

それ以外の場合は、次の場所で環境を設定してみてください。

 /etc/launchd.conf

もちろん、man ページは決定的なものではありません。http://developer.apple.com は優れたドキュメントですが、通常は正確なメモリ位置ではなく、より良いマニュアル ページが必要です。

最後に、次のような loginwindow でそれらを設定できます。

 ~/.MacOSX/environment.plist

さて、私には、これを行う方法がいくつかあるのは奇妙に思えますが...まあ、それは奇妙です。彼らは適切な init の置き換えを行いました。それはそれらすべてを支配する 1 つのプロセスですが、いいえ、多くのジョブはその外で実行されます。幸運を。これらの方法のいずれかを使用して、GUI に $VAR を取得できるはずです。

ああ、http://developer.apple.com/library/mac/#qa/qa1067/_index.html

OSX にはさまざまなセッションとドメインがあります。正確には、

 man launchctl

セッション:

現在知られているセッション タイプには、Aqua、LoginWindow、Background、StandardIO、および System が含まれます。

ドメイン:

指定されたドメインで *.plist で終わる plist(5) ファイルを探します。有効なドメインには、「system」、「local」、「network」、および「all」が含まれます。

読んでみると納得です。

うーん。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

ターミナル、iterm、サファリ、キーチェーン... nadaを開きました。誰もそのファイルを開きませんでした。

編集:ただし、launchdで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;

したがって、コンテキストは本当に重要です。つまり、コマンドが実行されるセッションと同様に重要です。

このツールのドキュメント、この init 置換、Apple で最も重要なデーモン、それらすべてを支配する 1 つのデーモンは、お粗末です。小便。貧しい。

于 2011-07-21T09:30:29.183 に答える