export设置环境变量

※发布时间:2019-9-15 3:07:15   ※发布作者:小编   ※出自何处: 

  Bash的环境变量分两种,临时的,或永久的。其实,这两者的设置方法是一样的,都是使用export命令,export是Bash的一个builtins。

  ($PYTHONPATH这个环境变量,是python程序的搜索径,在编写程序的时候,有时会很方便)

  还是使用export命令,只是将这条命令写入用户的.bash_profile文件,这个文件在每次用户登录的时候会被执行,这样就等同于永久设置了一个环境变量。

  export其实是declare -x命令的别名,在命令行直接输入export,可以查看所有的环境变量:

  export输出的是一个“全局变量”,后续的命令在执行时,都可以使用这个“全局变量”;文件包含(. or source)与执行命令一样,一个手动单条输入命令,一个批量自动载入命令执行,因此也可以直接使用这些“全局变量”;

  如果通过开新进程的方式执行脚本(./ or bash file.sh),父进程的这些“全局变量”全部可以被子shell进程直接使用;

  如果子shell进程也export变量,而且名称与父进程export的变量一样,则在子shell进程内部,使用自己的export的值,不过并不影响父shell进程的export的值,就是编程时全局变量和局部变量的关系;就算在子进程中unset,也不影响父进程的变量;

  如果把export语句放在一个函数中执行,输出的变量在函数外依然可见,应该说,在函数中export,与在这个进程中任意地方export的效果是一样的;

  所以,export可以理解为,进程级别的变量申明。父进程的变量子进程可见可用,也可重新定义,不影响父进程,子进程的变量父进程不可见不可用。金字旁的女孩名字

  我还测试了用setsid创建进程(父进程id为1),用(... &)创建进程(效果与setsid一样),在创建的子shell进程中,虽然此进程的父进程id号是1,但是依然可以看到真实父进程的变量。

  所以,在Bash的执行环境中,永久的环境变量,其实就是归属于最上层的父进程export的变量,它的所有子进程都可以见这些变量,只要这个进程还在,其变量就在;

  我们每次shell登录,都能直接使用的那些变量,其实是在每次登录的时候,bash重新创建的,bash要执行其初始化文件;这也说明了,你第一次登录的shell,自己export的变量,在第二次登录之后,是见不到的,除非把这些变量的export写入bash的初始化文件;

  export输出的环境变量,只对输入进程的subshell有效,对非sub的其它shell进程无效,即使是同一个用户的登录也看不到。[登录以回复]

  财成国际