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

Linux:命令行参数、环境变量

命令行参数

执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当我们想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。

在 C 语言中,命令行参数是一种从命令行获取输入的方法,可以用于运行程序时传递信息给程序。命令行参数通过 main 函数的参数传递给程序。main 函数的原型可以是如下两种形式之一:

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

或者:

int main(int argc, char **argv);

argc (argument count): 表示命令行参数的数量,包括程序名本身。因此,argc 至少为1

 argv (argument vector): 是一个指向字符串数组的指针,其中每个字符串是一个命令行参数。数组的第一个元素(即 argv[0])通常是程序的名称。接下来的元素是传递给程序的命令行参数。

环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。

按生命周期分:
永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效
临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效
按作用域分:
系统环境变量:公共的,对全部的用户都生效。
用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

 Linux 环境变量分类

系统级环境变量:
系统级环境变量对所有用户和进程都可见。它们通常在系统启动时被设置,并被所有用户和进程共享。一些常见的系统级环境变量包括PATH(用于指定可执行文件的搜索路径)、LANG(用于设置系统语言环境)等。

用户级环境变量:
用户级环境变量是每个用户独立设置的,只对该用户及其相关进程可见。这些变量可以在登录时通过不同的配置文件(如.bashrc、.bash_profile、.profile等)设置。常见的用户级环境变量包括HOME(指定用户的主目录路径)、USER(当前用户名)等。

进程级环境变量:
进程级环境变量是由特定进程设置的,并且仅对该进程及其子进程可见。这些变量可以通过编程语言(如C语言中的setenv函数)在程序中进行设置,或者通过终端命令行在特定的进程上下文中设置。

常⻅环境变量

PATH:决定了系统在哪些目录中查找可执行文件。当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件。

HOME:指定当前用户的主目录路径。

USER:当前用户的用户名。

SHELL:指定当前用户默认使用的shell。

LANG:指定系统的默认语言。

LD_LIBRARY_PATH:指定系统在哪些目录中查找共享库文件。

TERM:指定当前终端的类型。

PS1:定义命令行提示符的格式。

PS2:定义多行命令的提示符的格式。

查看环境变量⽅法

查看某一环境变量

echo $NAME //NAME:你的环境变量名称

查看所有的环境变量:

env

改变环境变量

设置新的环境变量,也可以用于修改已有的环境变量:

export NAME=//NAME为环境变量名

也可以在原有的环境变量上追加:

export PATH=$PATH:/home/nexus/process

进程是如何获取环境变量的

当我们打开终端界面时,会生成bash进程,bash进程有两个表:环境参数表和命令行参数表(都是类型为char*的指针数组),bash进程在启动时会读取操作系统本身的配置文件,并填写环境变量表,每当有子进程被创建时,父进程就将它的环境变量表传给子进程

当我们尝试通过指令或者程序操作等方法修改环境变量后,结束bash进程,并重新启动bash进程后会发现:环境变量会恢复为原先的配置。

这是因为每次启动bash进程都会读取系统的配置文件来获取环境变量,如果希望保持自定义的环境变量就需要修改配置文件,这样在每次bash启动后都会按照自定义配置文件进行初始化。

通过修改配置文件进行永久修改:

~/.bash_profile 和 ~/.bashrc:用户级环境变量配置文件。

/etc/profile 和 /etc/bashrc:全局环境变量配置文件。

修改配置文件后,需使用以下命令使其生效:

source ~/.bashrc

获取环境变量

使用命令行第三个参数

在C语言中,**<font style="color:rgb(6, 6, 7);">main</font>**函数可以接受三个参数,

通常定义为**<font style="color:rgb(6, 6, 7);">int main(int argc, char *argv[], char *env[])</font>**

*env[]实际就是环境表,是在操作系统调用main的时候传递给程序的,作为一个全局变量存储在main栈帧中。可以通过main函数的第三个参数env访问环境变量表:

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

使用全局变量environ

libc中定义了一个全局变量environ,它指向环境变量表:

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

需要注意的是,environ未包含在任何头文件中,因此需要手动声明。

使用库函数getenv

getenv函数可以获取指定的环境变量值:

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

http://www.xdnf.cn/news/16003.html

相关文章:

  • ES6 Object.values 特定字段处理
  • IntelliJ IDEA clean git password
  • 每日一题(小白)暴力娱乐篇33
  • ObjectOutputStream 深度解析
  • 关于RK3588cpu多线程速度慢的问题
  • vLLM V1:性能优化与集群扩展的深度解析
  • LabVIEW 项目开发:需求引导与系统统筹
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_自定义单元格大小示例(CalendarView01_07)
  • 基于CNN与VGG16的图像识别快速实现指南
  • 职坐标IT培训热门技术实战精讲
  • 跟我学C++中级篇——内存异常的分析
  • 在排序数组中查找元素的第一个和最后一个位置--LeetCode
  • 【SAP ME 43】RESRCE表操作导致HANA中表锁定解决方案
  • Netlink套接字
  • 基于微信小程序的中医小妙招系统的设计与实现
  • 使用dompurify修复XSS跨站脚本缺陷
  • k8s 调整Node节点 Max_Pods
  • dify本地部署,docker-plugin_daemon-1启动不了,一直报错
  • rtps报文分析
  • 2025年消防设施操作员考试题库及答案
  • Windows 11设置开机自动运行 .jar 文件
  • 实战篇|多总线网关搭建与量产验证(5000 字深度指南)
  • 第五章、SpringBoot与消息通信(一)
  • useMemo + memo + useContext 性能优化实战:从无感重渲染到丝滑体验
  • 深入理解 Android Handler
  • Rocky8 升级 Python 3.9.20 并部署 Airflow 2.10.5
  • STM32F407的引脚说明
  • ActivityRecord、TaskRecord、ActivityStack、ActivityStackSupervisor、ProcessRecord
  • 【工具】在Cursor/VS Code中配置Python调试环境的完整指南
  • VASP 6.4.1 Ubuntu系统编译安装手册