在所有Unix和类Unix系统中, 每个进程都有其各自的环境变量设置。 缺省情况下, 当一个进程被创建时, 除了创建过程中的明确更改外,它继承了其父进程的绝大部分环境设置。Linux是一个多用户多任务的操作系统,可以在Linux环境下为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。
#include <stdlib.h> extern char **environ;
环境指针 环境表 +--------+ +--------+ environ: | --+------>| --+------>HOME=/home/ycxie +--------+ +--------+ | --+------>USERNAME=ycxie +--------+ | --+------>SHELL=/bin/bash +--------+ | --+------>HOSTNAME=fedora +--------+ | --+------>LANG=en_US.UTF-8 +--------+ | NULL | +--------+
一、 Linux环境变量分类
1、按照生命周期来分,Linux环境变量可以分为两类:
永久的:需要用户修改相关的配置文件,变量永久生效。
临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
2、按照作用域来分,Linux环境变量可以分为:
系统环境变量:系统环境变量对该系统中所有用户都有效。
用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。
二、 Linux设置环境变量的方法
1、在/etc/profile文件中添加变量 对所有用户生效 【永久的】
用vim在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
注:修改文件后要想马上生效还要运行source /etc/profile不然只能在下次重进此用户时生效。
2、在用户目录下的.bash_profile文件中增加变量 【对单一用户生效(永久的)】
用vim ~/.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
注:修改文件后要想马上生效还要运行$ source ~/.bash_profile不然只能在下次重进此用户时生效。
3、直接运行export命令定义变量 【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用export 变量名=变量值
定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
三、 Linux环境变量编程
1、全局变量environ
#include <stdio.h> #include <stdlib.h> int main() { extern char **environ; int i = 0; while(environ[i]) { printf("%s\n", environ[i++]); } return 0; }
2、 Linux环境变量API
#include <stdlib.h> char *getenv(const char *name); char *secure_getenv(const char *name);
#include <stdlib.h> int setenv(const char *name, const char *value, int overwrite); int unsetenv(const char *name);