我想写一个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()
函数和一点字符串处理更有意义。(您可以考虑使用sprintf
或snprintf
而不是strcat
。)
注意:如果你只是在你的程序内部使用更新后的$PATH
,你可以在这里停止阅读。
希望您不期望在程序完成运行后在命令行上对$PATH
进行任何更改。正在运行的C程序很可能是交互式shell的子进程。环境变量由子进程继承;它们不会传播回父进程。
如果这就是你想做的,你可以让你的程序打印新的PATH
值到stdout,然后让shell计算它:
PATH=`your-program`
或者它可以打印命令来设置一个或多个环境变量:
eval `your-program`
(在bash中,您可以使用$(your-program)
和`your-program`
)
不,没有其他选择。你必须构建一个字面值字符串并把它传递给setenv。
没有其他立即可用的选择。如果需要多次执行此操作,可以编写一个单独的函数来处理此操作。