1

OS X 10.8.3 を使用しています。

ターミナルを開くと、

echo $PATH

/usr/local/bin があり、sh または bash で実行した場合も同様です

ただし、次のpythonコード出力:

import os
print os.environ.copy()

/usr/local/bin パスがない

$PATH の仕組みを説明できる人はいますか? それを拡張するものはありますか?Python スクリプトがターミナルに表示される $PATH を出力しなかったのはなぜですか? Linux ディストリビューションでも同じように動作しますか?

どのように私はそれに遭遇しましたか?崇高な 2 プラグイン js2coffee をインストールしました。プラグインはサブプロセス (インポート サブプロセス) を実行し、exec の名前 js2coffee を提供します。 . それを修正するために、envに追加する必要がありました:

env = os.environ.copy()
env["PATH"] = "/usr/local/bin/"

js2coffee = subprocess.Popen(
    'js2coffee',
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    shell=True,
    env= env
)
4

1 に答える 1

3

ターミナル ウィンドウは、通常、インタラクティブ シェルをホストしますbashシェルは、man ページ (例: bash )に記載されているように、さまざまなプロファイルと「rc」ファイルを使用して初期化されます。その初期化は、環境を無数の方法で変更します。

具体的に/etc/profileは、ツールを実行してディレクトリを変数path_helperに追加します。PATH

Finder、Dock、Launchpad などから起動されたアプリケーションは、シェルを実行せず、同様の環境を持っていません。親プロセスからかなり基本的な環境を継承し、最終的に launchd に戻ります。たとえば、 の出力を参照してくださいlaunchctl export。Automator、AppleScript Editor、またはサードパーティ ツール Platypus をenv使用して、GUI アプリからコマンドを実行し、その内容を確認することもできます。

Linux シェルの標準が何であるかは定かではありませんが、同じ原理が適用されます。デスクトップ環境から起動されたプログラムは、環境を直接継承します。シェルは、さまざまなスクリプト ファイルを使用して環境を初期化するため、環境が異なる場合があります。

于 2013-03-30T11:03:14.123 に答える