我想编写一个 C 程序来将一个字符串附加到 PATH 环境变量。 类似于“export PATH=$PATH:$HOME/mylib”
我有这样的C代码
setenv("PATH", "$PATH:$HOME/mylib",1); //这是行不通的。
我想的其他工作是使用 getenv() 获取 PATH 和 HOME,并在堆中创建内存,然后使用 strcat() 追加它们。
我可能不得不在我的代码中多次更新 PATH:所以这是一个令人厌烦的过程。
还有其他选择吗?
谢谢
最佳答案
$FOO
语法,扩展为名为 FOO
的环境变量的值,是 shell 的一个特性;它不能直接在 C 中使用。
您的系统可能会提供 wordexp()函数,它在 C 中为您提供了类似的功能。
但由于您只是扩展两个具有固定名称的环境变量(“HOME”
和 “PATH”
),因此使用可移植的 getenv()
函数和一些字符串处理。 (您可能会考虑使用 sprintf
或 snprintf
而不是 strcat
。)
注意:如果您只是在程序内部使用更新后的 $PATH
,您可以在这里停止阅读。
希望您不希望在程序完成运行后在命令行上对 $PATH
进行任何更改。您正在运行的 C 程序很可能是交互式 shell 的子进程。环境变量被子进程继承;它们不会传播回父进程。
如果这就是你想要做的,你可以让你的程序打印新的 PATH
值到标准输出,然后让 shell 评估它:
PATH=`your-program`
或者它可以打印命令来设置一个或多个环境变量:
eval `your-program`
(在 bash 中,您可以使用 $(your-program)
以及 `your-program`
。)
关于c - setenv() 更新 PATH 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14063992/