我想编写一个C程序,将一个字符串附加到PATH环境变量。 类似“export PATH = $ PATH:$ HOME / mylib”
我有像这样的C代码
setenv(“PATH”,“$ PATH:$ HOME / mylib”,1); //无效。
我认为其他工作是使用getenv()获取PATH和HOME并在堆中创建内存然后使用strcat()附加它们。
我可能需要在代码中多次更新PATH:所以这是一个令人厌烦的过程。
还有其他选择吗?
由于
答案 0 :(得分:2)
$FOO
语法扩展为名为FOO
的环境变量的值,是shell的一个特性;它不能直接在C中使用。
您的系统可能会提供wordexp()功能,该功能在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`
。)
答案 1 :(得分:1)
没有别的选择。您必须构建文字字符串并将其传递给setenv。
答案 2 :(得分:1)
没有其他选项可立即使用。如果需要多次执行此操作,可以编写单独的函数来处理此问题。