setenv()更新PATH环境变量

时间:2012-12-28 02:51:19

标签: c linux setenv

我想编写一个C程序,将一个字符串附加到PATH环境变量。 类似“export PATH = $ PATH:$ HOME / mylib”

我有像这样的C代码

setenv(“PATH”,“$ PATH:$ HOME / mylib”,1); //无效。

我认为其他工作是使用getenv()获取PATH和HOME并在堆中创建内存然后使用strcat()附加它们。

我可能需要在代码中多次更新PATH:所以这是一个令人厌烦的过程。

还有其他选择吗?

由于

3 个答案:

答案 0 :(得分:2)

$FOO语法扩展为名为FOO的环境变量的值,是shell的一个特性;它不能直接在C中使用。

您的系统可能会提供wordexp()功能,该功能在C中提供了类似的功能。

但是,由于您只是使用固定名称("HOME""PATH")扩展两个环境变量,因此使用可移植getenv()函数和一些字符串处理更有意义。 (您可以考虑使用sprintfsnprintf而不是strcat。)

注意:如果您仅在程序内部使用更新的$PATH,则可以在此处停止阅读。

希望您在程序运行完成后,不希望在命令行上对$PATH进行任何更改。您正在运行的C程序很可能是交互式shell的子进程。环境变量由子进程继承;他们不会传播回父母的程序。

如果您正在尝试这样做,可以让程序将新的PATH值打印到stdout,然后让shell对其进行评估:

PATH=`your-program`

或者它可以打印命令来设置一个或多个环境变量:

eval `your-program`

(在bash中,您可以使用$(your-program)以及`your-program`。)

答案 1 :(得分:1)

没有别的选择。您必须构建文字字符串并将其传递给setenv。

答案 2 :(得分:1)

没有其他选项可立即使用。如果需要多次执行此操作,可以编写单独的函数来处理此问题。