目录
环境变量
引入
- 还记得 指令 和 我们自己所写的可执行文件 本质是一样的吗?
- 那么为什么执行指令 直接输入 就好了,而我们的需要 输入路径 才能运行,明明大家都是在某个目录下存放的文件耶
- 这就和环境变量有关系辣
- 我们的命令必须得被找到,才能执行
- 而我们如果不带路径,是找不到我们自己的可执行文件的
- 而系统的命令默认是可被找到的
- 是因为将系统命令所在路径都配置在了PATH这一环境变量中(加$ ,可以使其被认为时shell变量)
- 这一串,以 : 作分隔符
- 以这些路径作为搜索路径,这样系统命令就可以被搜索到
查看环境变量
echo + $ + 环境变量名
env
显示系统中的环境变量
set
显示本地定义的shell变量和环境变量
getenv()
是一个函数,头文件<stdlib.h>
参数可带可不带
- 不带就显示全部的环境变量
- 参数以字符串的形式传入,带上可以打印该环境变量的内容
- eg:getenv("PATH")
char* env[ ]
main函数的参数
首先,我们需要知道,main函数其实是有三个参数的
应用
- 完成对 一条指令,不同选项 实现不同的子功能 (bash底层就是使用命令行参数实现的)
使用
char** environ
是一个外部第三方参数,声明即可使用
内容
因为其以null结束,所以可以用于判断是否结束
环境变量是什么
环境变量一般是指在操作系统中,用来指定操作系统运行环境的一些参数
示例
- 我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里
- 但是照样可以链接成功,生成可执行程序
- 原因就是有相关环境变量帮助编译器进行查找
- 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
常见的环境变量
设置环境变量
export指令
- 子进程的环境变量都是从父进程来的
- 默认,所有的环境变量,都会被子进程继承
- 就是因为它有全局属性,所以才会被子进程继承
- 使用export设置后,不需要再次编译程序,即可打印更新后的值
如果不加export会怎么样呢?
我们会发现,env是找不到我们的bit的,而set和echo可以
环境变量分类
因此我们其实在命令行上,可以定义两种类型的变量
- 像bit这种的命令行变量(独有的,不是全局的)
- 像getenv这样的全局变量
虽然是全局变量,但这些环境变量只在当前会话中有效,并且在会话结束后不会保留
当会话结束时,进程及其相关的环境都会被终止,因此设置的环境变量也会被清除
如果想要在会话之间保留环境变量的更改
- 可以将其添加到适当的启动脚本中(eg:.bashrc / .profile)
- 这样每次启动新的交互式会话时,这些环境变量都会被加载并保持有效
删除环境变量
unset +环境变量名
就不做展示了
修改shell配置文件
Shell的配置文件 -- 如~/.bashrc, ~/.bash_profile, ~/.zshrc
- 打开适当的配置文件,找到设置了环境变量的行,然后将其删除或注释掉(在行首添加
#
符号)- 保存文件后,新的设置将在下次登录时生效
env
本身并不能直接删除环境变量,但可以通过使用该命令来重新设置环境变量为空值,从而实现“删除”的效果