CプログラムからPATH環境変数を表示、設定、変更しようとしています。私はこのようなことをしています:-
char *cmd[] = { "echo", "$PATH", (char *)0 };
if (execlp("echo", *cmd) == -1)
しかし、私は結果を得ていません。
を使用するgetenv()
必要があります。シェルを通過する必要はありません。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("PATH='%s'\n", getenv("PATH"));
return EXIT_SUCCESS;
}
ただし、値を変更することはできません。環境変数は子プロセスに継承されますが、子には独自のコピーがあります。シェルの環境は、どの言語で記述されているかに関係なく、別のプログラムから変更することはできません。もちろん、独自のプロセスの値を変更することはできますが、それはあなたが求めたことではありません。
シェル自体で、現在の環境設定を変更できますが、変更できるのはそこだけです。これが、環境を変更するシェルスクリプトを実行するために「ソース」を使用する必要がある理由です。
表示したい場合は$PATH
、これを試してください:
#include <stdlib.h>
printf("PATH: %s\n",getenv("PATH"));
変更する場合は、setenv()
またはを使用してくださいputenv()
。
これを試して:
char *cmd[] = { "$PATH", (char *)0 };
if (execlp("echo", cmd) == -1)
#include <stdio.h>
#include <stdlib.h>
...
char *pPath;
pPath = getenv("PATH");
if (pPath!=NULL)
printf ("The current path is: %s",pPath);
putenv("PATH=somepath");
...
より良い解決策はすでに与えられていますが、説明として。$ PATH変数は、echoコマンド自体ではなく、コマンドシェルによって解析および変換されます。すでに提案されているソリューションでは、代わりにgetenv()を使用して環境変数の値を取得します。
これを実行するためにコマンドシェルを呼び出すには:
system( "echo $PATH" ) ;
しかし、そのソリューションは、それを行うためだけに新しいプロセスとコマンドプロセッサ全体を呼び出すため、やや重いものです。