有没有办法使用 C 在 Linux 中设置环境变量?
我试过 setenv()
和 putenv()
,但它们似乎对我不起作用。
原文由 iman453 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法使用 C 在 Linux 中设置环境变量?
我试过 setenv()
和 putenv()
,但它们似乎对我不起作用。
原文由 iman453 发布,翻译遵循 CC BY-SA 4.0 许可协议
任何 unix 程序都在与启动它的进程不同的进程中运行;这是一个“子”过程。
当一个程序启动时——无论是在命令行还是任何其他方式——系统都会创建一个新进程,它(或多或少)是父进程的副本。该副本包括父进程中的环境变量,这是子进程“继承”其父进程的环境变量的机制。 (这主要是这里其他答案所说的)
也就是说,进程 只 设置 自己的 环境变量。
其他人提到采购 shell 脚本,作为在当前进程中设置环境变量的一种方式,但是如果您需要以编程方式在当前(shell)进程中设置变量,那么有一种稍微间接的方式是可能的。
考虑一下:
% cat envs.c
#include <stdio.h>
int main(int argc, char**argv)
{
int i;
for (i=1; i<argc; i++) {
printf("ENV%d=%s\n", i, argv[i]);
}
}
% echo $ENV1
% ./envs one two
ENV1=one
ENV2=two
% eval `./envs one two`
% echo $ENV1
one
%
内置的 eval
评估其参数,就好像该参数是在 shell 提示符下键入的一样。这是一个 sh 风格的例子; csh 风格的变体留作练习!
原文由 Norman Gray 发布,翻译遵循 CC BY-SA 2.5 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
1 回答3.3k 阅读
我在这里做一个疯狂的猜测,但是这些函数似乎不起作用的正常原因不是因为它们不起作用,而是因为用户并不真正了解环境变量是如何工作的。例如,如果我有这个程序:
然后我从 shell 运行它,它不会修改 shell 的环境——子进程无法做到这一点。这就是为什么修改环境的 shell 命令是内置的,以及为什么需要
source
一个包含要添加到 shell 的变量设置的脚本,而不是简单地运行它。