Linux进程——环境变量之二

devtools/2024/12/22 15:13:55/

文章目录

    • 环境变量
      • 查看环境变量
      • 获取环境变量
      • main()的第三个参数
      • 本地变量
      • 全局环境变量
      • 内建命令与常规命令

环境变量

查看环境变量

在上一篇文章中我们只说了查看某个环境变量的值,那么如何查看所有的环境变量呢

使用指令env即可

例如

QQ_1721910604069.png

这里我们也不需要全部记住,只需要记住一些比较常见的

  1. PWD
    这个环境变量就是给pwd指令的结果了
  2. HOME
    这里对应的就是cd ~命令了,找到家在哪里

那其实在我们登录Xshell时,他所做的工作就是认证信息,将bash加载到内存,形成进程,根据用户名初始化环境变量,进入家目录

这样我们其实就能理解为什么当我们直接改环境变量值的之后,直接重启Xshell就能恢复了,因为每一次都要重新加载初始化

获取环境变量

那么在C语言中是如何获取环境变量呢

就是使用getenv()函数即可,返回值即为环境变量的值,参数是环境变量名称

例如

char* ret = NULL;
ret = getenv("PATH");

main()的第三个参数

我们之前说了main的前两个参数,表示命令行参数表

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

这里的第三个参数其实就是环境变量的指针数组,他指向的就是环境变量表

我们可以像之前一样循环打印看看环境变量

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

本地变量

我们可以在bash中直接定义环境变量,直接使用等号即可

环境变量=值

然后使用echo $环境变量就能查看了

但是我们自己定义的变量本质上是本地的,使用env是查不到的

但如果我们想要定义的环境变量被放在系统中的变量中,就需要export 环境变量名

全局环境变量

在上面的一系列介绍中,我们很容易产生一种感觉,分为临时的本地变量和全局的环境变量,事实上也就是如此

在修改或者定义环境变量时,我们只修改了bash进程中的环境变量,当我们重新登录之后,bash又恢复成原来的样子了

这时因为bash解释器会从bash_profile文件中初始化环境变量

也就是说,如果我们想要彻底将一个环境变量保存,就需要保存到他的配置文件当中

QQ_1721912108865.png

并且我们联系之前的知识,由父进程创建的进程会采用写时拷贝的方式来达到共用的目的,也就是说父进程的环境变量可以被子进程使用

这也就是说环境变量具有全局性

在c语言中其实也算是这样,我们可以使用extern来声明外部环境变量

内建命令与常规命令

我们知道bash的命令不用加上路径是因为他存在环境变量PATH里了

但如果我们将PATH置空,这些命令自然也就不能运行了,但是有一些指令,比如说pwd、echo,仍然可以正常运行

这主要是因为Linux的指令分为两类,一类是bash创建子进程执行的,称之为常规命令,另一类是bash自己执行的,相当于调用一个函数,称之为内建命令


http://www.ppmy.cn/devtools/85398.html

相关文章

论文解读:DiAD之SG网络

目录 一、SG网络功能介绍二、SG网络代码实现 一、SG网络功能介绍 DiAD论文最主要的创新点就是使用SG网络解决多类别异常检测中的语义信息丢失问题&#xff0c;那么它是怎么实现的保留原始图像语义信息的同时重建异常区域&#xff1f; 与稳定扩散去噪网络的连接&#xff1a; S…

elementPuls 表格反选实现

真的在网上搜了很多资料发现根本实现不了反选 最下面有示例 然后去看了下官网 发现官网有教你怎么选中某个值的方法 官网中的”多选“ 官网地址 <template><el-tableref"multipleTableRef":data"tableData"style"width: 100%"selectio…

wps在pc端在线预览,而不是下载

如果有有java后端代码如下 SneakyThrowsApiOperation("访问文件")GetMapping("/download/{name}")public void getImage(HttpServletResponse response, PathVariable("name") String name) {String imagePath uploadFilePath File.separator …

基于springboot+vue+uniapp的网上花店小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

操作系统:进程1

一.进程 1.什么是进程 一个进程创建&#xff0c;他会生成几块&#xff1a; 代码段&#xff1a;进程执行的程序代码数据段&#xff1a;全局变量&#xff0c;静态变量&#xff0c;在进程生命周期中是动态可变的堆&#xff1a;动态分配的内存区域&#xff0c;malloc、calloc、real…

Unity Canvas动画:UI元素的动态展示

在Unity中&#xff0c;Canvas是用于管理和展示用户界面&#xff08;UI&#xff09;元素的系统。Canvas动画是UI设计中的重要组成部分&#xff0c;它能够提升用户体验&#xff0c;使界面更加生动和响应用户操作。本文将探讨Unity Canvas动画的基本概念、实现方法以及一些实用的技…

HDShredder 7 企业版案例分享: 依照国际权威标准,安全清除企业数据

HDShredder 7 企业版用户案例 天津鸿萌科贸发展有限公司是德国 Miray 公司 HDShredder 数据清除软件的授权代理商。近日&#xff0c;上海某网络科技有限公司采购 HDShredder 7 企业版x4&#xff0c;为公司数据存储资产的安全清除工作流程配备高效的执行工具。HDShredder 7 企业…

LC 128.最长连续序列

128.最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a; nums [100,4,200,1,3,2]…