Linux 环境变量 命令行参数

news2024/7/5 20:28:28

文章目录

  • 问题引入
  • 环境变量
  • 环境变量相关操纵(附源码)
  • 命令行参数
  • 问题解释

问题引入

Linux下,为什么我们自己写的可执行文件需要写明路径才可以执行,而系统的命令不需要?

如何使自己的命令也可以不带路径执行?

环境变量

Linux环境变量的概念:
Linux环境变量是一种存储在操作系统中的值,用于控制应用程序的行为。环境变量可以在系统启动时设置,也可以在运行时动态设置。环境变量通常用于存储系统级别的配置信息,例如路径、语言、用户名等。在Linux系统中,环境变量以键值对的形式存在,键是变量的名称,值是变量的内容。可以使用命令行工具如export和set来设置和查看环境变量。应用程序可以通过读取环境变量来获取配置信息,从而实现不同的行为。

简易理解
类似于语言学习中的变量 int a = 1 ;a为变量,
1为变量目前所存储的值,在操作系统的学习中,有多种变量,变量的性质不同,功能也不同,变量处处都有,环境变量顾名思义是与程序执行的环境有关,问题引入部分的问题就涉及环境变量的问题。

常见/需要了解的环境变量:
PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。

环境变量相关操纵(附源码)

查看环境变量的方法:
方法一、二、三:
在这里插入图片描述
运行结果:在这里插入图片描述

方法四:echo $NAME //NAME:你的环境变量名称。

本地变量与环境变量
在Linux中,本地变量(local variable)和环境变量(environment variable)是两种不同类型的变量,它们具有不同的作用范围和生命周期。

  1. 作用范围:

    • 本地变量:本地变量只在定义它的代码块(如函数或脚本)内部有效。它们对于其他代码块是不可见的。
    • 环境变量:环境变量在整个系统中都是可见的,可以被不同的进程和程序访问和使用。
  2. 生命周期:

    • 本地变量:本地变量的生命周期与它们所在的代码块相关。当代码块执行完毕或变量超出作用范围时,本地变量将被销毁。
    • 环境变量:环境变量的生命周期在整个系统中持久存在,直到显式删除或系统关闭。它们可以在不同的进程和会话中共享和传递值。
  3. 设置和访问:

    • 本地变量:本地变量通常是通过在代码中直接声明和赋值来设置的,并且只能在定义它们的代码块中使用。
    • 环境变量:环境变量可以在shell中使用export命令设置,或者通过在启动脚本(如.bashrc.profile)中定义。其他进程和程序可以通过调用系统函数(如getenv())来访问环境变量的值。
  4. 用途:

    • 本地变量:本地变量通常用于在代码块内部存储临时数据和中间结果,对于其他代码块是不可见的。
    • 环境变量:环境变量用于存储系统级的配置信息、用户首选项、路径等,可以在不同的进程和会话中共享和使用。

总之,本地变量和环境变量在作用范围、生命周期、设置和访问方式以及用途上有所区别。本地变量仅在定义它们的代码块内部有效,用于存储临时数据;而环境变量在整个系统中可见,用于存储系统级配置信息。

env指令
在Linux中,env是一个命令行工具,用于显示当前进程的环境变量或在指定环境下执行给定命令。

env命令的常见用法有两种:

  1. 显示当前进程的环境变量:

    $ env
    

    这会列出当前进程的所有环境变量及其对应的值。输出的格式为key=value形式。

  2. 在指定环境下执行给定命令:

    $ env -i <key1>=<value1> <key2>=<value2> ... <command>
    

    这会在指定的环境变量下执行给定的命令。通过-i选项可以清除当前环境变量,然后通过<key>=<value>的形式设置新的环境变量。最后,<command>表示要执行的命令。

    例如,要在清除环境变量的情况下执行ls命令,可以使用以下命令:

    $ env -i ls
    

    如果要在指定环境变量的情况下执行命令,可以使用以下命令:

    $ env VAR1=value1 VAR2=value2 <command>
    

    例如,要在设置PATH环境变量后执行ls命令,可以使用以下命令:

    $ env PATH=/usr/local/bin ls
    

env命令的主要作用是在不同的环境变量下执行命令,或者查看当前进程的环境变量。它在脚本中常用于控制命令执行的环境,或者作为调试工具来检查环境变量的设置。

可以通过man env命令查看env命令的更多详细信息和选项。
getenv函数
在Linux中,getenv()是一个C语言函数,用于获取指定环境变量的值。

getenv()函数的原型如下:

#include <stdlib.h>

char *getenv(const char *name);

该函数接受一个字符串参数name,表示要获取的环境变量的名称。它返回一个指向环境变量值的字符串的指针,如果找不到指定的环境变量,则返回NULL

以下是一个使用getenv()函数的示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char *path = getenv("PATH");
    if (path != NULL) {
        printf("PATH: %s\n", path);
    } else {
        printf("PATH environment variable not found\n");
    }

    return 0;
}

在这个示例中,我们使用getenv()函数获取名为PATH的环境变量的值,并将其存储在path指针变量中。然后,我们根据返回值判断是否成功获取了环境变量,并打印出相应的结果。

需要注意的是,getenv()函数返回的字符串指针指向的是环境变量的内部存储空间,因此不应该尝试修改返回的字符串。如果需要修改环境变量的值,应该使用相关的函数,如setenv()putenv()

另外,getenv()函数是标准C库提供的函数,定义在<stdlib.h>头文件中。在使用getenv()函数之前,需要包含该头文件。

临时环境变量创建(生命周期为本次连接Linux)
export 变量名=变量值
本地变量创建(生命周期为本文件内)
变量名=变量值

命令行参数

在这里插入图片描述
argc的含义为 指针数组argv的所含字符串数。
argv 为接受指令选项的指针数组
env 为接受环境变量的指针数组
argv 和 argc 可规范命令格式,可以支持命令有多选项。
上述3个参数均为 bash 辅助传入(先阶段粗略了解)

问题解释

Linux下,为什么我们自己写的可执行文件需要写明路径才可以执行,而系统的命令不需要?
1.子进程在默认情况下会继承父进程环境变量,始源的环境变量来自于bash,bash的环境变量来自于系统文件;
2.我们执行的命令都是进程中执行;
3.例如 PATH HOME 环境变量几乎在每个进程中都有;
4.系统自带的可执行文件通过PATH环境变量,找到文件位置,不需要传入了。

如何使自己的命令也可以不带路径执行?
1 通过给PATH环境变量添加我们自定义文件的路径
2.PATH变量存储多个系统程序自带的路径,多个路径间用“ :“符号隔开,要想添加,需按此格式。
在这里插入图片描述
3.利用set指令 set PATH = PATH + :所设路径 ;
(指令使用错误也不会造成损失,重新连接Linux系统即可,永久更改需在配置文件中操作,但不建议这样做)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MioIO笔记01

视频地址&#xff1a;分布式文件系统MinIO教程&#xff0c;2021最新版【通俗易懂】_哔哩哔哩_bilibili 目录 1【分布式文件存储系统Minio实战】 P001【1.课程介绍】05:08 P002【2.Minio优点和基础概念】19:29 P003【3.Minio的EC码和文件存储结构】11:33 2【Minio环境搭建】…

【youcans动手学模型】ShuffleNet 模型

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】ShuffleNet 模型 1. ShuffleNet 网络模型1.1 模型简介1.2 论文介绍 2. 在 PyTorch 中定义 ShuffleNet V1 模型类2.1 分组卷积与通道混洗2.2 ShuffleNet 单元2.3 自定义 Shuffle…

0、如何用运python成为顶级黑客

前言 黑客攻击可以导致个人、组织或公司的机密信息被窃取、破坏或泄露&#xff0c;造成财务损失、声誉受损、系统崩溃等各种问题 一、为什么Python编程语言适合网络安全工作&#xff1f; Python编程语言在网络安全工作中具有许多优势&#xff0c;以下是一些详细介绍&#xf…

性能测试中的随机数性能问题探索

目录 缘起 多线程 单线程 末了 总结&#xff1a; 在软件测试中&#xff0c;经常会遇到随机数。我简单分成了两类&#xff1a; 简单取随机数&#xff1b; 从一个集合中随机取值。 其实第二个场景包含在第一个场景内。对于接口测试来说&#xff0c;通常我们直接使用第二种…

springboot定时任务详解

文章目录 一、基于注解&#xff08;静态&#xff09;1、添加依赖2、创建定时任务3、参数说明 二、基于接口&#xff08;动态&#xff09;1、添加依赖2、添加数据库记录3、创建定时器4、启动测试 三、Quartz1、添加依赖2、编写任务类3、编写配置类4、启动项目 在我们开发项目过程…

css基础知识十四:什么是响应式设计?响应式设计的基本原理是什么?如何做?

一、是什么 响应式网站设计&#xff08;Responsive Web design&#xff09;是一种网络页面设计布局&#xff0c;页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整 描述响应式界面最著名的一句话就是“Content is like wat…

AD20|原理图导入Pcb时三极管引脚报错 Unkown Pin:Pin Q1-B

完成原理图绘制后&#xff0c;将其导入到Pcb中进行布局时&#xff0c;出现报错;Unknown Pin: Pin Q1-B. 原因是&#xff1a;引脚名称不一致 在原理图中&#xff0c;三个引脚分别定义B、C、E&#xff1b; 而在常见的TO—92A封装中&#xff0c;使用1、2、3作为三个引脚的名称&am…

实习工作之定时任务

需求&#xff1a;在当天晚上12点定时将过期数据的状态置为冻结状态 版本一代码实现[相当于是一个死代码&#xff0c;因为不能自动调度] public void updateStatus() throws CommonException, ParseException {String date_str "2023-07-01 00:00:00";Date expireT…

为什么我从 Manjaro Linux 跳到 EndeavourOS

我使用 Manjaro Linux 已经两年了,但随着时间的推移,我最初对 Manjaro 的喜爱逐渐减少,我对它的感觉越来越不舒服。这就是我转向 EndeavourOS 的原因。 我根本不是你所说的 Distrohopper 我早在 20 世纪 90 年代中期就开始使用 Linux,当时使用的是 RedHat Linux。2003 年…

网络请求库-axios的入门指南

网络请求库axios-入门指南 网络请求库-axios认识axios库axios发送请求axios基本使用axios基本演练配置baseURLaxios创建实例axios发送多个请求&#xff08;了解&#xff09; axios请求和响应拦截器axios请求封装&#xff08;简洁&#xff09; 网络请求库-axios 认识axios库 有…

使用 Maya Mari 设计 3D 波斯风格道具(p2)

今天瑞云渲染小编给大家带来了Simin Farrokh Ahmadi 分享的Persian Afternoon 项目过程&#xff0c;解释了 Maya 和 Mari 中的建模、纹理和照明过程。由于篇幅较长&#xff0c;分上下两篇来分别阐述。接着会继续讲述Persian Afternoon 项目过程的纹理和灯光渲染方面内容。 纹理…

Apikit 自学日记:安装、使用浏览器插件测试

Apikit 研发管理和自动化测试产品中&#xff0c;提供了多种发起 API 测试的方式&#xff1a; 服务器测试&#xff1a;通过 Apikit 官方远程服务器发送请求&#xff0c;不需要安装任何插件&#xff0c;但是无法访问本地服务器(localhost)、内网、局域网。 插件测试&#xff1a;…

linux创建软链接

目录 软链接的作用创建软链接删除软链接修改链接 软链接的作用 就如同电影里演的一样&#xff0c;为保护价值昂贵的钻石&#xff0c;做一个和真正的钻石一模一样的假钻石来掩人耳目&#xff0c;假钻石的信息和真的一模一样&#xff0c;看到假的钻石就如同看到真的一样。Linux中…

《基于AidLux的自动驾驶智能预警应用方案》

YOLOP模型转ONNX ONNX是开放式神经网络(Open Neural Network Exchange)的简称&#xff0c;ONNX的规范及代码主要由微软&#xff0c;亚马逊&#xff0c;Facebook和IBM等公司共同开发&#xff0c;以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型的框架有&#xff1…

记录实现QT和qml model/view 交互时候遇到的坑

使用QT的model/view 建立全局静态变量 打印发现有值输出 但是界面无日志显示 原因是一开始使用调用函数传参传的logModel参数加了const参数修饰 这个错误太傻了&#xff0c;找了半天一直怀疑外部类的问题 其实setContextProperty是这么用的 传QObject类型的引用之后它内部会…

【无标题】下载redis工具RESP.app(RedisDesktopManager)

1、安装前提&#xff1a; Windows&#xff1a; 1、Install Microsoft Visual C 2015-2019 x64 (If you have not already). 2、Download Windows Installer from http://redisdesktop.com/download. (Requires subscription)指导手册地址&#xff1a; https://docs.resp.app/…

DataSecurity Plus金融行业案例

摘要&#xff1a;DataSecurity Plus是一款强大的数据安全解决方案&#xff0c;为金融机构提供全面的数据保护和合规性监控。本文将介绍DataSecurity Plus在金融行业的使用案例&#xff0c;包括文件审计、数据分类和合规性报告等功能的应用。 DataSecurity Plus 文件审计&#…

《The book of why》读书笔记 -- introduction:mind over data

最近在浅学causal learning&#xff0c;拜读《The Book of Why》&#xff0c;记录一些笔记&#xff0c;下为书的introduction部分 下面这段话我觉得写得非常好 This book tells the story of a science that has changed the way we distinguish facts from fiction and yet ha…

性能测试如何做?资深10年测试带你揭秘,测试之路进阶...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在做功能测试、自…

医学访问学者面试技巧注意

医学访问学者面试是获得进一步学术发展和研究机会的重要环节。在面试过程中&#xff0c;准备充分并注意一些关键技巧可以帮助你增加成功的机会。以下是知识人网小编整理的一些建议和技巧&#xff0c;希望对你在医学访问学者面试中取得好成绩有所帮助。 1. 提前了解研究机构&…