[英]How to use `system()` to execute a command in the parent shell environment
[英]How to set an environment variable when using system() to execute a command?
我正在 Linux 上編寫 C 程序,需要使用system()
執行命令,並且在執行該命令時需要設置環境變量,但我不知道在使用system()
時如何設置環境變量。
如果要將環境變量傳遞getenv
父進程不同的子進程,可以結合使用getenv
和setenv
。 假設您想將不同的PATH
傳遞給您的孩子:
#include <stdlib.h>
#include <string.h>
int main() {
char *oldenv = strdup(getenv("PATH")); // Make a copy of your PATH
setenv("PATH", "hello", 1); // Overwrite it
system("echo $PATH"); // Outputs "hello"
setenv("PATH", oldenv, 1); // Restore old PATH
free(oldenv); // Don't forget to free!
system("echo $PATH"); // Outputs your actual PATH
}
否則,如果您只是創建一個新的環境變量,則可以使用setenv
和unsetenv
的組合,如下所示:
int main() {
setenv("SOMEVAR", "hello", 1); // Create environment variable
system("echo $SOMEVAR"); // Outputs "hello"
unsetenv("SOMEVAR"); // Clear that variable (optional)
}
當然,不要忘記檢查錯誤代碼。
在 Linux 中使用setenv()
api 設置環境變量
#include <stdlib.h>
int setenv(const char *envname, const char *envval, int overwrite);
有關詳細信息,請參閱http://www.manpagez.com/man/3/setenv/ 。
使用setenv()
設置環境變量后,使用system()
執行任何命令。
這應該有效:
#include "stdio.h"
int main()
{
system("EXAMPLE=test env|grep EXAMPLE");
}
產出
示例=測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.