2016-12-24 7 views
0

OSX上のMonoで変数PATHの値を取得しようとしています。しかし、私は端末から同じ結果を得ていません。PATH変数が不完全です

Environment.GetEnvironmentVariable("PATH") 

の/ usr/binに:(不完全)C#の

/binにします。/ usr/sbinに:/ sbinに

(予想)端子In

echo $PATH 

/ライブラリ/Frameworks/Python.framework/Versions/3.5/bin:/usr/local/bin:/usr/bin:/b/opt/X11/bin:/ usr/local/share/dotnet:/ Library/Frameworks/usr/sbin:/ sbin:/ .composer/vendor/bin:/ usr/local/php5//Mono.framework/Versions/Current/Commands

私はGetEnvironmentVariableのための2番目のパラメータとして使用可能なすべてのEnvironmentVariableTargetを使用してみましたが、どれも完全なパスを返しません。

明らかなものがありませんか?

+2

お使いのアプリケーションでは、端末とは異なる環境が使用されています。 – bansi

+0

ええ、それは基本的にあなたの問題です。端末が起動すると、環境を準備するいくつかのファイルが実行されます。 Linuxシステムでは、一般に 'profile'ファイルと '.bashrc'がユーザーフォルダにありますが、これらのファイルは通常、システム環境変数を変更したり拡張したりします。 – r1verside

+0

私は主にMonoコマンドのパスを取得することに興味があります。私は同じプロファイルを読み込むことができますか? – Lazlo

答えて

1

新しいターミナルウィンドウを起動すると、シェルは自動的に/etc/profile/etc/bashrc_Apple_Terminal(またはターミナルを使用しない場合は/etc/bashrc)を実行します。

Part of /etc/profileは、を使用するときに表示される「デフォルト」要素に加えて、パスに追加要素を追加するパスコマンドを作成する/usr/libexec/path_helper -sを実行することです。あなたは、単にモノに固有のパスをしたい場合は、あなただけ読むことができる、しかし

var info = new ProcessStartInfo(); 
info.FileName = "/bin/bash"; 
info.Arguments = "-l -c \"echo $PATH\""; // -l = 'login shell' so we execute /etc/profile 
info.UseShellExecute = false; 
info.RedirectStandardOutput = true; 
info.RedirectStandardError = true; 
var p = Process.Start(info); 
p.WaitForExit(); 

string path = p.StandardOutput.ReadToEnd().Trim(); // Drop the trailing \n from our echo output 

:シェルは、次のコードを使用することができます使用して正確なパスを取得する一般的な解決のために

ファイル/etc/paths.d/mono-commandsの内容。これは、シェルがpath_helperを介してPath変数に追加されたモノパスを取得する場所です。