环境变量,本地变量

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语言中的局部变量和全局变量

相关推荐
码间留白3 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
吹什么轩4 小时前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
张宇Joaquin5 小时前
AMD uProf 工具采集微架构特征使用介绍
服务器
殷忆枫5 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
第404号工位5 小时前
手机到底有没有偷听我们?我抓包了 72 小时,抓到了真凶
linux·人工智能·架构
老李IT笔记5 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
字节跳动开源5 小时前
ByteDance 2026 上半年 Linux 内核贡献回顾
linux·开源
小此方6 小时前
Linux网络(二十八):从NAT转换到正反向代理:图解内网通信、NAPT端口映射
linux·运维·网络
刚入门的大一新生6 小时前
Linux-进程池
linux·运维·服务器