0

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

我有这样的C代码

setenv("PATH", "$PATH:$HOME/mylib",1); //这不起作用。

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

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

有什么选择吗?

谢谢

4

3 回答 3

2

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

您的系统可能会提供wordexp()函数,它在 C 中为您提供类似的功能。

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

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

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

如果这就是你想要做的,你可以让你的程序将新PATH值打印到标准输出,然后让 shell 评估它:

PATH=`your-program`

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

eval `your-program`

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

于 2012-12-28T05:02:53.717 回答
1

不,别无选择。您必须构建文字字符串并将其传递给 setenv。

于 2012-12-28T03:10:05.797 回答
1

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

于 2012-12-28T03:11:40.877 回答