当前位置: 首页 > news >正文

[Linux]环境变量

目录

基本概念

常见的环境变量

PATH测试

HOME测试

SHELL测试

和环境变量相关的命令

main函数的三个参数

环境变量的组织方式

通过代码如何获取环境变量

通过系统调用获取或设置环境变量

基本概念

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性,可以被子进程继承下去.

常见的环境变量

  • PATH : 指定命令的搜索路径

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

  • SHELL : 当前Shell,它的值通常是/bin/bash。

如何查看环境变量

查看环境变量方法
echo $NAME //NAME:你的环境变量名称

PATH测试

为什么我们运行自己的程序需要指定路径,而使用指令时(如ls等)却不需要?

 PATH指定了命令的搜索路径:

        环境变量PATH内包含了数条路径(以进行分割),当我们运行程序时,如果我们没有指明路径,系统会自动从左往右在PATH里的路径下寻找,找到了该程序就能直接运行了。

如何让自己的程序能直接运行?不支持c++程序,只支持c程序

这里提供两种方法:

  • 方法一:将自己的程序导入到PATH下的路径中

sudo cp hello /usr/bin

        我们将hello程序拷贝到了PATH环境变量中的一条路径下。当我们直接运行该程序时,系统就能找到该程序了。

  • 方法二: 将程序的当前路径放入PATH中

    这里需要用到export操作

    • export: 设置一个新的环境变量

export PATH=$PATH:当前路径

 直接运行成功:

注意点:

  1. export是设置一个新的环境变量,我们这里相当于覆盖原有的PATH,因此设置时要带上PATH本来就有的路径(即$PATH),后面再跟上我们要添加的路径,不然会造成很多指令的失效,因为PATH中的路径没了,系统找不到指令了。

  2. 发生上面的问题时,我们重启我们的Xshell即可,因为在我们的家目录中有环境变量的配置文件,每次启动时都会自动将对应的环境变量导入到bash的上下文中。

  3. 对单一用户生效的永久性变量(用户级),在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。

  4. 临时有效的环境变量(只对当前shell有效),直接使用export指令添加。

HOME测试

用户的主工作目录(即用户登陆到Linux系统中时,默认的目录):

cd ~命令 //返回家目录(与HOME中记录的家目录相同)   

SHELL测试

        我们在Linux操作系统当中所敲的各种命令,实际上需要由命令行解释器进行解释,而在Linux当中有许多种命令行解释器(例如bash等),我们可以通过查看环境变量SHELL来知道自己当前所用的命令行解释器的种类。

和环境变量相关的命令

  • echo: 显示某个环境变量值

  • export: 设置一个新的环境变量

  • env: 显示所有环境变量

常用的几个环境变量整理:

PATH指定命令的搜索路径
HOME指定用户的主工作目录
HISTSIZE保存历史命令记录的条数
LOGNAME当前用户的登录名
HOSTNAME指主机的名称
SHELL用户当前用的哪种shell
MAIL指当前用户的邮件存放目录
PS1命令提示符,root用户是#,普通用户是$
PS2附属提示符,默认是“>”
SECONDS从当前shell开始运行所过去的秒数
  • set: 显示本地定义的shell变量和环境变量

本地定义的shell变量,env无法显示.

  • unset: 清除环境变量

本地定义的shell变量:

环境变量:

main函数的三个参数

int main(int argc,char* argv[],char* env[])
{ }

 main函数的前两个参数:

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

 通过上面,我们可以很清楚的看到,argv[0]中是我们要运行的程序,后面则是跟上了我们添加的选项。

main函数的第三个参数:

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}

打印出的是我们的环境变量。

环境变量的组织方式

        每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。

通过代码如何获取环境变量

  • 通过mian函数的第三个参数

上面已演示,不多赘述。

  • 通过第三方变量environ获取

        libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明

#include <stdio.h>
int main()
{extern char** environ;for(int i = 0;; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}

通过系统调用获取或设置环境变量

  • putenv

  • getenv

 使用getenv函数获取环境变量PATH的值:

#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}

 

http://www.lryc.cn/news/59928.html

相关文章:

  • 次优二叉查找树(次优查找树)_递归和非递归实现_20230414
  • 贯穿设计模式第八话--设计原则总结篇
  • 地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析
  • 部分国产水文水动力模型介绍
  • HTTP请求
  • 网络威胁情报项目:为什么仍然很疯狂
  • Linux系统下使用shell“多线程执行命令”
  • HighTec编译器错误记录
  • 智慧校园大数据云平台(3)
  • 《花雕学AI》15:BingGPT桌面端——尝鲜体验ChatGPT4.0同源技术新Bing的最新成果
  • 反序列化漏洞及PHP魔法函数
  • 企业应用程序单点登录
  • 前馈PID控制(热交换器/反应釜温度控制)
  • Nginx配置ssl证书实现https安全访问
  • 大学生必备神器
  • 【MyBatis Plus】004 -- MyBatis Plus高级(AR、MP插件、自定义全局操作、自动填充、逻辑删除、枚举、代码生成器)
  • 3年外包终上岸,我只能说:但凡有点机会,千万别去外包...
  • 【故障诊断】基于 KPCA 进行降维、故障检测和故障诊断研究(Matlab代码实现)
  • 软件质量保证与软件测试复习笔记(第一周总体介绍+黑盒测试详细)
  • WRF模式与Python融合技术在多领域中的应用及精美绘图教程
  • Reactor设计模式
  • 精通 TensorFlow 2.x 计算机视觉:第二部分
  • 《算法竞赛进阶指南》0x51 线性DP
  • spring数据库事务管理
  • Huggingface微调BART的代码示例:WMT16数据集训练新的标记进行翻译
  • synchronized 的 monitor 机制
  • NumPy 初学者指南中文第三版:1~5
  • ChatGLM-6B论文代码笔记
  • 机器学习入门实例-加州房价预测-1(数据准备与可视化)
  • 【ROS2指南-20】了解ROS2组件的用法