私はAppleコンピュータを使用しています。端末を開いて実行すると、echo $PATH
環境に現在の「PATH」変数が表示されます。私のパスや他の環境変数に何かを追加すると、プロセスがアクティブな間だけ持続します。
私が知りたいのは、このパスがデフォルト値をどのように取得するかです。 .zshrc(またはbashを使用している場合は.bash *)を見ましたが、パス内のすべてのプログラムをエクスポートできるエントリはありません。この基本的なリストを制御するオペレーティングシステムの役割は何ですかPATH
?
答え1
login(1)
伝統的に、PATH
シェルにアイテムを渡す前に設定しますが、OS Xでは異なる考えをする必要があるかもしれません。~/.MacOSX/environment.plist
これを設定できる場所はどこですか(特定のアプリケーションで要求されない限りお勧めできません)。最後に、Appleがpath_helper(8)
難読化コマンドを追加したことを確認しました。PATH
rc
/etc
path_helper
Mac OS XIのZSHの場合は、以下で無効にして手動で設定してください。PATH
私の~/.zshenv
ファイル。設定したパスで実際に何かを行う必要がある場合、これは理想的ではないかもしれませんpath_helper
。
答え2
@corleoneが投稿したリンクは、$ PATH環境変数を解釈する方法を示しています。
端末で宣言しても持続しないのは、最終的に終了する一時的なプロセスであるためです。この変数は、シェルの起動時に取得したファイル(通常はドットファイルの1つ)で設定する必要があります。
多くのオペレーティングシステムとは異なり、OSは
特定のディレクトリを含むように$ PATHを更新したい場合は、それを配置するための最良の場所(OS Xの場合)は.bash_profileにあり、これはその特定の変数を設定する他のすべての場所よりも優先されます。何も上書きせずに単に追加したい場合は、.bash_profileに次の行を追加できます。
PATH="$PATH:/path/to/another/bin"
答え3
シェルが起動すると/etc/profile
runが実行され、/usr/libexec/path_helper
このコマンドの出力がeval
編集され、パスの初期値が設定されます。man path_helper
プログラムが出力を入れる初期ディレクトリのリストを取得する方法を確認してください。
答え4
loginwindow.app
ユーザーの初期設定を担当します。認証プロセスに渡され、ユーザーが認証されると、呼び出されたloginwindow.app
ように環境が設定されます(読み取りおよび)。 PATHはカーネルで設定したものと同じです。これはすべてルートで実行されることに注意する必要があります。 GUIセッションを使用している場合、シェルはありません。login -pf USERNAME
man login
man environ
/usr/bin:/bin:/usr/sbin:/sbin
user.cs_path = /usr/bin:/bin:/usr/sbin:/sbin
デフォルトでは、Terminal.app はシェルをログインシェルで起動します。login -pf USERNAME
(rootとして)実行し、シェルのrcファイルを読みます。 zsh /private/etc/zshenv csh /private/etc/csh.login / usr bash
/ libexec/path_helper loginwindow.app`の場合。ksh
/private/etc/profile is read. For
,
is read. For
,
is read. All use
to modify the PATH set by the