首页 > linux > linux环境变量浅析

linux环境变量浅析

2015年9月6日 578 人阅读 发表评论 阅读评论

1、概念

环境变量是存在于系统中的公用数据,任何程序都可以访问。通常来说,环境变量存储的都是系统的一些公用信息,例如执行文件的搜索动态库的搜索路径,当前用户等。环境变量是key=value的形式的字符串集合,shell里可以使用env这个内建(build-in)的命令来获取环境变量信息。所以说环境变量是存储公共配置信息的地方。

2、shell中“source命令(点命令)执行脚本”和“直接执行脚本”区别

“source命令”或者“点命令”来执行脚本,不需要脚本具备可执行权限,如果在执行的脚本中有影响环境变量的操作,则脚本执行之后对环境变量的影响在当前shell中依然存在,这是因为“source命令”和“点命令”没有启用新的子进程,故对脚本中对环境变量的影响保留到当前shell中。

“直接执行脚本”,需要脚本具备可执行权限,如果在执行的脚本中有影响环境变量的操作,则脚本执行之后对环境变量的影响在当前shell中不存在,这是因为直接执行shell脚本,调用fork系列函数启用了新的子进程,虽然子进程继承了父进程(shell进程)的环境变量,但是在子进程中对环境变量的任何操作都不会对父进程的环境变量造成影响。

3、程序中如何获取环境变量

运行时获取之“自力更生”:其实环境变量就放在main调用栈参数argv的后面,所以我们可以通过遍历的方式查看所有的环境变量。

Demo:

1
2
3
4
5
6
7
8
9
10
11
#include 
 
int main(int argc, char * argv[])
{
        int i = 0;
        for (i = argc + 1; argv[i] != 0; ++i)
        {
                printf("%s\n", argv[i]);
        }
        return 0;
}

运行时获取之“前人栽树,后人乘凉”:使用库接口

通过c库接口getenv获取,使用方法可以自行man getenv查看。

运行后获取之“偷窥”:程序运行时我们还是可以查看进程运行时使用的环境变量

 cat /proc/pid/environ | tr -s ‘\0’ ‘\n’

4、set,env,export的区别

set查看当前shell的环境变量(包含用户的环境变量),env查看的是用户的环境变量,export不带参数可以查看“可以导出成为用户的环境变量”的变量,export带参数时可以设置环境变量(临时的),shell退出就失效了,如果想永久生效则需要在用户主目录下的profile文件,或者/etc/profile文件中添加export语句。

have fun…

分类: linux 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.