C语言 setenv()更新PATH环境变量



我想写一个C程序附加一个字符串到PATH环境变量。比如"export PATH=$PATH:$HOME/mylib"

我有这样的C代码

setenv("路径","美元路径:$ HOME/mylib ", 1);

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

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

有其他选择吗?

谢谢

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

您的系统可能提供了wordxp()函数,它在c中提供了类似的功能。

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

注意:如果你只是在你的程序内部使用更新后的$PATH,你可以在这里停止阅读。

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

如果这就是你想做的,你可以让你的程序打印新的PATH值到stdout,然后让shell计算它:

PATH=`your-program`

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

eval `your-program`

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

不,没有其他选择。你必须构建一个字面值字符串并把它传递给setenv。

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

最新更新