1.解决一个问题
我们通常执行一个命令的时候,或者是我们写好一个程序,我们运行的方式好像不太一样,
普通的cad,ll这些本质也是在运行命令,当我们执行自己写的命令./命令的方式来运行的,这是为什么?
我们直接写我们名字,是无法运行的,本质这就是环境变量在搞鬼
我们在运行命令ll cad这些他是写在userbin这个文件夹里面,这个文件夹存在一个PATH上面
在这个文件下,这里面的文件路径,我们直接执行,是不需要写路径的,默认可以运行,但是我们自己写的命令不在这里面所以需要加./这个意思是,在这个路径下寻找
这里我们有两种方法,一种是把我们这个程序放到bin这里面,但是这样我们会污染bin,所以不建议这样做
还有一种是,把这个文件的路径加到PATH里面就行了
PATH=路径,这样就是把我们这个路径放到PATH里面,但是这样真的可以吗
我们发现,我们本来的命令为啥无法执行了??
看一下PATH
发现我们原来的命令都没有了,所以我们本来的命令是无法执行的,这是我们只需要退出xshell
在进行登陆就可以恢复(具体原因我们后面会说)
恢复了
那么我们应该怎么办呢?
此时我们再看path
发现不仅有我们原来的,还有我们呢新加的
此时我们运行我们的程序
此时是正确的,我们就可以使用啦
补充:win下面也有环境变量
2.见一下环境变量,演示一下
命令env查看所有环境变量
具体解释
我们之前学过一个命令,cd - 可以回到我们刚刚的目录,此时系统是怎样找到的呢?
就是因为有这个系统变量的oldpwd存在
我们可以查看我们历史执行的history
这个是什么记录的呢?
就是依靠HISTSIZE哪个1000,是最多纪录1000条,超出就会删除之前的命令,记录新的
我们cd ~这个命令是如何找到家目录呢?
就是通过home这个环境变量来记录的
就是寸目前的用户是谁,也就是pwd
3.环境变量和c/c++代码和进程之间的关系
a.用代码获取环境变量
我们上一章说过了,main里面是可以写参数的,这个参数最多是三个,除了我们上次写的那两个,还有一个就是
char *env[]这个本质是一个表格,表格的最后是一个NULL,接下来我们看一下
注意如果要写第三个参数,前两个不可以少,需要占位
源代码和输出的结果如图,这个本质是:把环境变量传给进程
除了这种方法还有两种在代码中获取环境变量的方法
environ本质是和env差不多,
这样看和main参数其实也一样
getenv是获取指定的
其实就是遍历
4.为什么我么一关闭程序,所有都恢复原装了?
这关键就是存在一个配置文件,我们点击xshell之后会先运行bash,这个命令就是看配置文件的,我们之前改path再给也不是配置文件,说白了就是改了内存,所以从新开始之后,主要配置文件不改,其他的都是白谈
5.环境变量,本地变量
区别:本地变量无法继承,不具备全局性,只在bash里面可以访问
如何构造本地变量
补充:子进程是可以继承父进程的全局变量的
此时我们新开一个进程
此时这个进程是我们上面进程的子进程,此时我们上面写的是无法继承的
我们只需要放到环境变量中就行
加上关键词expor之后就被作为环境变量都可以运行了
我们可以把本地变量和环境变量看作
C语言中的局部变量和全局变量