c - setenv() 更新 PATH 环境变量

标签 c linux setenv

我想编写一个 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() 函数和一些字符串处理。 (您可能会考虑使用 sprintfsnprintf 而不是 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/

相关文章:

linux - 如何指定 TeamCity 构建代理 linux 用户组

php - Symony2 控制台命令删除缓存文件夹,更改权限

c - gtk_main 更新 GUI

c++ - 创建可由 Lua 加载的 C++ DLL

c# - 我有一个 C sharp 程序,我可以将它编译为 Linux 服务器的可执行文件,以便我可以在服务器上运行它而无需安装单声道吗?

php - Apache SetEnv 前置 REDIRECT_ 。是什么赋予了?

tomcat - 在 Windows 7 上安装 Tomcat

linux - SETENV:错误:$ ($) 中的修饰符

c - 打印字符偶校验

c - 打开CV乘以巨大的矩阵分割错误