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

【Linux】深入理解进程(三)(环境变量)

文章目录

  • 环境变量
    • 🚩概念
    • 🚩PATH
    • HOME,USER
    • 和环境变量相关的命令
  • 环境变量组织形式
  • 🚩命令行参数
  • 获取环境变量
    • 命令行第三个参数
    • 第三方变量environ
    • 🚩系统调用或设置环境变量
    • 🚩内建命令常规命令

环境变量

🚩概念

环境变量指操作系统用来指定在操作系统运行环境的一些参数
比如:我们在编写C/C++代码时,链接时,我们不知道动静态库链接在哪,但是还能够运行,里面就有环境变量帮助编译器查找
🚩环境变量具有全局属性(可以被子进程继承)

查看环境变量

echo $环境变量名

echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jib/.local/bin:/home/jib/bin

🚩PATH

PATH:指令搜素路径
🚩为什么我们自己的可执行程序必须要加 ./ 而有些程序直接输入就行 ls ll 这种

因为这些程序已被放入系统搜素路径中,可以直接搜素到而./翻译过来就是找到当前路径

那么怎么将mycode加入指令搜索路径

export PATH=$PATH:路径

export PATH=$PATH:/home/jib/1010/environment

HOME,USER

系统怎么知道进哪个路径,HOME
在这里插入图片描述

和环境变量相关的命令

  • echo 显示一个环境变量
  • export 设置一个环境变量
  • env 显示全部环境变量
  • unset 取消一个环境变量
  • set: 显示本地定义的shell变量和环境变量

环境变量组织形式

在这里插入图片描述

🚩命令行参数

main函数也是有参数的,只不过我们用的时候操作系统调用Startup(),CRTStartup()函数为我们搭建了C/C++环境

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
using namespace std;
int main(int argc,char* argv[])
{for(int i=0;i<argc;i++){printf("argv[%d]-> %s \n",i,argv[i]);}//printf("%s ",getenv("MYVAL"));if(argc >= 2){if(strcmp(argv[1],"help")==0){printf("帮助\n");}if(strcmp(argv[1],"-a")==0){printf("功能a\n");}}printf("");return 0;
}

命令行输入的字符串进入**argv
在这里插入图片描述
也可以像ls -a,ls -l这样
在这里插入图片描述
在这里插入图片描述

获取环境变量

命令行第三个参数

main还有第三个参数,环境变量表
打印

int main(int argc,char* argv[],char* env[])
{for(int i=0;i<argc;i++){printf("argv[%d]-> %s \n",i,argv[i]);}for(int i=0;env[i];i++){printf("env[%d]->%s",i,env[i]);}//printf("%s ",getenv("MYVAL"));if(argc >= 2){if(strcmp(argv[1],"help")==0){printf("帮助\n");}if(strcmp(argv[1],"-a")==0){printf("功能a\n");}}printf("");return 0;
}

在这里插入图片描述

第三方变量environ

extern char** environ;for(int i=0;environ[i];i++){printf("environ[%d]->%s",i,environ[i]);}

environ这个全局变量是C在运行库定义的,不是在程序中定义的
extern作用:这个environ不是在文件中定义的,链接的时候会找到它

🚩系统调用或设置环境变量

getenv获取一个环境变量

printf(“%s\n”,getenv(“PATH”));
printf("%s\n ",getenv(“MYVAL”));

在这里插入图片描述

export设置环境变量

export MYVAL=“hello”

在这里插入图片描述
🚩环境变量被子进程继承了
我们运行的进程都是子进程bash运行时,操作系统会从配置文件中找到环境变量,子进程继承父进程环境变量

若是没有export呢?

在这里插入图片描述
打印没打出来,但是echo又能找到

🚩内建命令常规命令

运行的进程都是子进程吗?也有例外
因为echo根本就没有创建子进程
export影响shell所有子孙后代,没有export,./mycode创建子进程就继承不了MYVAL
没有export说明只是在该进程设置了环境变量,echo也没有创建子进程,在该进程中找到了MYVAL

两批命令:

  • 常规命令(外部命令):通过创建子进程实现,大部分指令都是常规命令,ls,vim,grep
  • 内建命令:bash不创建子进程,通过自己实现,bash调用了自己的写的或系统提供的函数,如pwd echo

内建命令作用
有些指令必须要内建命令实现,常规命令创建子进程不影响父进程cd指令我们要影响shell本身,如果是常规命令,创建子进程然后退出,目录就会没变,所以cd必须是内建命令

http://www.dtcms.com/a/561949.html

相关文章:

  • 【C学生序号姓名学号年龄降序排序】2022-12-9
  • 平衡二叉树解题思路
  • 电子商务网站应该如何建设四川教育公共信息服务平台
  • 响应式官方网站便宜自适应网站建设厂家
  • 实例016 百元买百鸡问题
  • 硬件-射频学习DAY3——高频电流的“恐深症”:趋肤效应解密
  • Hudi安装部署
  • 宠物之家网站开发九江网站建设优化公司
  • 网站的360快照怎么做锦州网站seo
  • 【Android】结合View的事件分发机制解决滑动冲突
  • python 异步编程 -- 理解asyncio里的Future 对象
  • zoho crmvue做网站对seo
  • Java---System 类
  • 31.使用等待队列实现阻塞访问
  • Tyme 技术赋能:节气与季节的高效求解实战攻略
  • 【C++】2025CSP-J第二轮真题及解析
  • 网站建设教程流程更改wordpress主题语言
  • 朝阳区网站建设蒙特网设计公司
  • 济南网站优化厂家做同城服务网站比较成功的网站
  • 老鼠目标检测数据集(3000张)
  • 想做个网站怎么做长沙五百强企业名单
  • 九江建网站报价wordpress wiki 整合
  • 中英文版网站建设小广告制作
  • 05-深度学习的原理:探讨深度学习的工作原理和数学基础
  • 【深度学习新浪潮】AI缺陷检测:从技术原理到工业落地实践
  • lol英雄介绍网站模板网络广告推广员
  • 接单网站设计 只做设计图报价cpa推广联盟平台
  • kotlin学习 基础知识一览
  • 开通建立企业网站谷歌浏览器下载安卓版
  • 基于 venv 快速搭建 Python 环境