Linux_环境变量_命令行参数

一.环境变量

在Linux中自己写的程序必须要带路径才能运行,相对路径或是绝对路径,但是像ls pwd这样的程序,不带路径也能运行。
image.png
当你想要运行一个程序时:

  1. 如果带有路径的话,则直接将对应路径的程序加载进内存,变为进程,执行代码。
  2. 如果不带路径的话,则操作系统会去系统默认路径下搜索,没有找到则报错。

这个系统默认路径就是PATH环境变量,它里面存放了一些经常需要执行的命令路径,有了环境变量后,我们执行程序时,不用加路径,操作系统也能找到对应的位置。
像ls,touch这样的命令,它的路径已经存放在了对应的PATH环境变量里,我们自己写的程序的路径没有在PATH中,所以在查找时,找不到就报错了。只要将我们写的程序地址,加入到PATH环境变量里,就不会报错了。

1.1 概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
  • 环境变量本质上是shell进程内部的一张表,当启动shell时,从用户的配置文件读取信息,初始化环境变量表

image.png

  • 同时,在命令行中可以创建shell本地变量

image.png

1.2 查看环境变量

1.2.1 echo 查看某个环境变量

image.png

1.2.2 env 查看环境变量

image.png

  • PATH :系统默认搜索路径
  • LOGNAME:登录SHELL的用户
  • USER:当前正在使用的用户
1.2.3 set 查看本地变量和环境变量

image.png

1.2.4 unset 取消本地变量和环境变量

image.png

1.2.5 export 将本地变量导入环境变量表中

image.png

1.2.6 putenv
  • 防止putenv里面出现指针问题。防止指针内容改变导致环境变量一直变化

1.3 代码中使用环境变量

在bash上运行的程序都是bash的子进程,在创建子进程时,父进程将它的环境变量表传递到子进程中,所以子进程可以访问环境变量表,这也说明了环境变量表具有全局属性,但是bash中的本地变量不能传递给子进程,只能在bash内部使用。

  1. 使用main函数参数来获取

env是一个指针数组,是一个环境变量表,最后一个位置总是为NULL,所以结束的判断为env[i]

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

  1. 使用全局变量environ来获取
    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main()
    6 {
    7   extern char** environ;
    8 
    9   for (int i = 0; environ[i]; ++i)
   10   {
   11     printf("environ[%d], %s\n", i, environ[i]);                                                                                                                                                            
   12   }
   13   return 0;
   14 }
   15 

  1. 使用函数获取(推荐)

上述两种方法需要程序员自己遍历环境变量表来获取对应的环境变量,使用不方便,使用函数获取更为简单。
image.png

    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main()
    6 {
    7   char* path = getenv("PATH");
        // putenv 可以导入环境变量
    8   if (path != NULL)                                                                                                                                                                                        
    9   {
   10     printf("%s\n", path);
   11   }
   12   return 0;
   13 }
   14   

二.命令行参数

main参数一般有三个int main(int argc, char* argv[], char* env[])

  • argv:指针数组,类似于env环境变量表,存放的是一个个字符串,最后一个位置是NULL
  • argc:表示argv里面有几个字符串
    1 #include<stdio.h>
    2 #include<unistd.h>
    3 #include<stdlib.h>
    4 
W>  5 int main(int argc, char* argv[], char* env[])
    6 {
    7   int i = 0;                                                                                                                                                         
    8   for (; i < argc; ++i)
    9   {
   10     printf("argv[%d]->%s\n", i, argv[i]);
   11   }
   12   return 0;
   13 }
   14 

image.png
通过上述观察,可以很清晰的看出,argv表是由bash父进程制作(在命令行输入的),传递给子进程的。
第一个参数是可执行程序,之后的参数作为命令行选项。

  • ls -a -l 就是传递命令行参数,根据参数的不同,执行不同的代码逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/386102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode、1268. 搜索推荐系统【中等,前缀树+优先队列、排序+前缀匹配】

文章目录 前言LeetCode、1268. 搜索推荐系统【中等&#xff0c;前缀树优先队列、排序前缀匹配】题目类型及分类思路API调用&#xff08;排序前缀匹配&#xff09;前缀树优先队列 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应…

2024 年 5 款适用于免费 iPhone 数据恢复的工具软件

搜索一下&#xff0c;你会发现许多付费或免费的iPhone数据恢复工具声称它们可以帮助你以很高的成功率找回所有丢失的数据。然而&#xff0c;这正是问题所在。真的很难做出选择。为了进一步帮助您解决数据丢失问题&#xff0c;我们在此列出了 5 款最好的免费 iPhone 恢复软件供您…

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…

Hive的小文件问题

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…

[Python] 如何用import导入模块

本篇博客来记以下关于import导入模块的笔记~ 可莉将这篇博客收录在了&#xff1a;《Python》 可莉推荐的优质博主主页&#xff1a;Kevin ’ s blog 我们在Python中可以使用import从标准库中导入一天模块&#xff0c;模块相当于是一个 .py 文件&#xff0c;我们导入后调用相当于…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

pythondjangomysql苏州一日游之可视化分析69216-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游服务等问题&#xff0c;对旅游服务进行…

【动态规划】【中位数】【C++算法】1478. 安排邮筒

# 作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 动态规划汇总 LeetCode1478. 安排邮筒 给你一个房屋数组houses 和一个整数 k &#xff0c;其中 houses[i] 是第 i 栋房子在一条街上的位置&#xff0c;现需要在这条街上安排 k…

C++基础入门:掌握核心概念(超全!)

C作为一门广泛使用的编程语言&#xff0c;以其高性能和灵活性在软件开发领域占据重要地位。无论是游戏开发、系统编程还是实时应用&#xff0c;C都是一个不可或缺的工具。本博客旨在为初学者提供C编程语言的核心概念&#xff0c;帮助你建立坚实的基础。 C关键字 C关键字是编程…

扫拖一体洗地机哪个好用?热门扫拖一体机品牌

扫拖一体洗地机是一种现代化的清洁设备&#xff0c;它可以帮助我们更快、更有效地清洁地面。这几年市面上的主流品牌纷纷更新迭代产品&#xff0c;那么&#xff0c;选择什么品牌的洗地机才是算是一个不错的选择呢&#xff1f;我们先了解下洗地机吧。 洗地机的功能与原理 市面…

编码、理解和实现LLM中的自注意力、多头注意力、交叉注意力和因果注意力

原文链接&#xff1a;understanding-and-coding-self-attention 2024年1月14日 自注意力是 LLM 的一大核心组件。对大模型及相关应用开发者来说&#xff0c;理解自注意力非常重要。近日&#xff0c;Ahead of AI 杂志运营者、机器学习和 AI 研究者 Sebastian Raschka 发布了一篇…

三天翻倍!ARM 被炒成“英伟达第二”?

周一&#xff0c;Arm股价再度大涨29%&#xff0c;盘中涨幅一度超过40%&#xff0c;单日交易量是过去三个月日均交易量的十倍以上&#xff0c;创下历史新高。自2月7日市场收盘后Arm公布财报以来&#xff0c;短短三个交易日内&#xff0c;Arm股价累计上涨超过90%。 上周&#xf…

前端JavaScript篇之await 在等待什么呢?async/await 如何捕获异常

目录 await 在等待什么呢&#xff1f;async/await 如何捕获异常 await 在等待什么呢&#xff1f; await 关键字实际上是等待一个表达式的结果&#xff0c;这个表达式的计算结果可以是 Promise 对象或者其他值。如果 await 后面的表达式不是 Promise 对象&#xff0c;那么 awai…

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…

CTFshow web(php命令执行 68-71)

web68 还是那句话&#xff0c;没看到flag在哪&#xff0c;那就优先找到flag位置 这里cvar_dump(scandir("/")); 直接输出根目录的位置&#xff0c;然后查看源代码&#xff0c;发现flag位置为flag.txt 知道flag在根目录下面的flag.txt直接访问就好了 cinclude(/flag…

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”&#xff1a;https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的&#xff0c;用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为&#xff1a;zig-w…

快速搭建PyTorch环境:Miniconda一步到位

快速搭建PyTorch环境&#xff1a;Miniconda一步到位 &#x1f335;文章目录&#x1f335; &#x1f333;一、为何选择Miniconda搭建PyTorch环境&#xff1f;&#x1f333;&#x1f333;二、Miniconda安装指南&#xff1a;轻松上手&#x1f333;&#x1f333;三、PyTorch与Minic…

langchain==win11搭建使用GPU

annaconda安装Python 3.11.7 下载代码&#xff1a; GitHub - chatchat-space/Langchain-Chatchat: Langchain-Chatchat&#xff08;原Langchain-ChatGLM&#xff09;基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM)…