Linux环境下读取和设置环境变量方法总结

在所有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);

Leave a Reply

Your email address will not be published. Required fields are marked *