1. 永久改变环境变量
修改如下两个文件中的任意一个即可
1. /etc/profile
2 .bash_profile
其中,/etc/profile是全局的环境变量,对所有用户生效,而.bash_profile只对当前用户起作用。
2. 在程序外临时设置环境变量
2.1. 对所有程序设置变量
export命令
功能:设置或显示环境变量
语法:export [-fnp] [变量名称]=[变量值]
说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。
参数:
-f 此时变量名称为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的环境变量。
举例:
export PRJROOT=/home/eriol/newproject
export PREFIX=${PRJROOT}/tools
export PATH=${PATH}:${PREFIX}/bin
export LD_LIBRARY=/usr/local/lib
Linux系统环境变量中,路径名用冒号分隔。
注意:export设置只对当前的bash登录session有效,它是存在内存里面的。
2.2. 对单个程序设置变量
在程序运行命令前设置,例如
GLOG_v=4 ./bin/executor
这样可执行文件即可获取这个宏定义
3. 程序获取环境变量
函数名: getenv
用 法:char *getenv(char *envvar);
函数说明:getenv()用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。getenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。
返回值: 执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符的第一个字节是null。
相关函数:_wgetenv、getenv_s、_wgetenv_s
4. 程序内部设置环境变量
putenv 函数用来向环境表中添加或者修改环境变量。
函数原型:
函数参数:
- string:指向环境变量的指针,其中环境变量必须以 "name=value" 的形式给出
返回值:
- 调用成功返回 0
- 调用失败时返回 非0 值
如果环境表中没有 name 这个环境变量,则添加该环境变量;如果环境表中已经有了name这个环境变量,则先删除之前的 value,再修改为新的 value。
setenv 函数和putenv 函数功能类似,可以用来添加或修改环境变量。
函数原型:
函数参数:
- name:环境变量名
- value:环境变量值
- overwrite:重写选项,当 name 在环境表中存在时,如果 overwrite 的值为 0 ,则不修改name的值;如果 overwrite 的值为 非0,则修改name的值。
返回值:
- 调用成功返回 0
- 调用失败时返回 非0
putenv 函数和 setenv 函数虽然功能类似,但是这两个函数在实现方面还是有区别的,区别如下:
putenv函数:
putenv 函数会将参数 string 直接填写到环境表中,不会再为 "name=value" 这个字符串再去分配内存。如果是在一个函数中定义的string,那么在调用该函数后,string 指向的内容可能会被释放,就找不到name环境变量的值了。
setenv 函数:
setenv 函数和 putenv 函数不同,它会将name和value指向的内容复制一份并为其分配内存,形成 "name=value" 的字符串,并将其地址写入到环境表中。所以就不会出现上面putenv 的情况,就算函数返回了,name 和 value指向的内容被释放了,仍然有一份拷贝在。