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

【Linux】环境变量

目录

1. 查看环境变量

2. 环境变量PATH

3. 设置新的环境变量

3.1 临时设置

3.2 永久设置

4. 自定义环境变量PATH

5. main函数的参数

5.1 argc和argv

5.2 env

6. 通过代码获取环境变量


环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

1. 查看环境变量

  • 查看所有环境变量
env

  • 查看指定环境变量
echo $环境变量名    # $符号表示取变量的值

2. 环境变量PATH

Linux命令本质上是二进制可执行程序,which命令的功能是查找命令的路径。

例如,cd命令的本质是/usr/bin/cd这个程序文件。为什么无论当前工作目录是什么,都能执行/usr/bin/cd这个程序?这就是通过PATH做到的。

PATH记录了系统执行任何命令的搜索路径,如上图记录了(路径之间以:隔开):

  • /usr/local/bin
  • /usr/bin
  • /usr/local/sbin
  • /usr/sbin
  • /home/sqh/.local/bin
  • /home/sqh/bin

当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体,然后执行。

3. 设置新的环境变量

3.1 临时设置

export 变量名=变量值

临时设置的环境变量在关闭Shell时失效。

3.2 永久设置

  • 针对当前用户生效,配置在当前用户的:~/.bashrc文件中

  • 针对所有用户生效,配置在系统的:/etc/profile文件中

修改/etc/profile需要root权限

4. 自定义环境变量PATH

PATH记录了系统执行任何命令的搜索路径,所以我们能在任何目录直接执行例如cd、ls这样的命令,而不必写出命令的路径。所以我们只要在PATH中加入可执行程序的路径,就能在任何目录直接执行该可执行程序。

临时修改PATH:

永久修改PATH的方法参考上一节永久设置新的环境变量,在配置文件的末尾加上

export PATH=$PATH:可执行程序的搜索路径

5. main函数的参数

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

5.1 argc和argv

程序在命令行下运行时,argc表示命令行参数的个数,argv是一个数组,数组元素是指向字符串的指针,argv保存了命令行参数。

-a -b -c等是选项,我们可以根据不同的选项,执行不同的功能。类似于Linux命令的使用方式,如ls -a:显示所有目录和文件,包括以.开头的隐藏文件,ls -l:以列表的形式显示详细信息。

// test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Usage(const char* name)
{
    printf("\nUsage: %s -[a|b|c]\n\n", name);
    exit(0);
}

int main(int argc, char* argv[])
{
    // 程序必须带1个选项,即命令行参数必须为2,否则打印使用方法
    if (argc != 2)
    {
        Usage(argv[0]);
    }

    if (strcmp(argv[1], "-a") == 0)      // 选项为-a,打印当前目录下的文件名
    {
        // 简易写法,实际应该写一个 打印当前目录下的文件名 的函数
        printf("打印当前目录下的文件名\n");
    }
    else if (strcmp(argv[1], "-b") == 0) // 选项为-b,打印当前目录下的文件的详细信息
    {
        // 简易写法,实际应该写一个 打印当前目录下的文件的详细信息 的函数
        printf("打印当前目录下的文件的详细信息\n");
    }
    else if (strcmp(argv[1], "-c") == 0) // 选项为-c,打印当前目录下的文件名(包含隐藏文件)
    {
        // 简易写法,实际应该写一个 打印当前目录下的文件名(包含隐藏文件) 的函数
        printf("打印当前目录下的文件名(包含隐藏文件)\n");
    }
    else
        printf("其他功能,待开发\n");

    return 0;
}

5.2 env

env是环境变量表。

6. 通过代码获取环境变量

  • 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指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。

#include <stdio.h>

int main(int argc, char* argv[])
{
    extern char** environ;    
    for (int i = 0; environ[i]; i++)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}
  • getenv查看指定环境变量
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%s\n", getenv("PATH"));
    printf("%s\n", getenv("HOME"));
    return 0;
}

http://www.kler.cn/news/109109.html

相关文章:

  • GoLong的学习之路(十一)语法之标准库 fmt.Printf的使用
  • JDK、JRE及JVM的关系及作用
  • web:[网鼎杯 2020 青龙组]AreUSerialz
  • 第44天:前端及html、Http协议
  • ChinaSoft 论坛巡礼 | 智慧化 IDE 论坛
  • day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))
  • 08 MIT线性代数-求解Ax=b:可解性与结构Complete Solution of Ax=b
  • 设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
  • el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果
  • 292_C++_建立流连接,创建多个线程执行I\O异步操作
  • 搭建MyBatis
  • volatile 系列之如何解决可见性问题
  • excel技巧
  • JVM虚拟机:从结构到指令让你对栈有足够的认识
  • Kali安装docker
  • 婚礼的魅力
  • 清华训练营悟道篇之操作系统的内存管理
  • Redis的瓶颈在哪里?
  • 第一章 初识Android
  • 强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版
  • Epinoia-有状态网络的意图验证模块,略读
  • JavaWeb复习
  • Leetcode—21.合并两个有序链表【简单】
  • Hadoop学习总结(搭建Hadoop集群(伪分布式模式))
  • c++系列——智能指针
  • vue3后台管理框架之将模拟Mock接口替换成真实接口
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • 【数据结构笔记】8.串
  • 《系统之美》读书笔记 - 系统及系统的三大特征