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

Linux环境变量配置与std访问环境变量

文章目录

  • 前言
  • 1. 用户环境变量快速配置
    • 1.2 **以上语句的具体解释:**
    • 1.3 $PATHNAME实现增量式添加
  • 2.系统级永久配置与避坑指南
    • 2.1 特殊字符处理
    • 2.2 动态PATH管理
    • 2.3 敏感信息保护
    • 2.4 环境调试命令
  • 3. c++std中访问环境变量


前言

首先介绍一下Linux下各目录操作符的含义:
~/.bashrc-
~” :表示主目录,也就是当前登录用户的用户目录。
“/” :是指根目录:就是所有目录最顶层的目录。
“./” :表示当前目录,./ 一般需要和其他文件夹或者文件结合使用,指代当前目录下的东西。
“. .” :表示上级目录
“/.” :隐藏文件前会带.如.bashrc

作用域与类型

类型生效范围配置文件生命周期
临时变量当前Shell会话 无(命令行设置)终端关闭失效
用户变量单用户所有会话~/.bashrc .zshrc用户登录加载
系统变量所有用户/etc/environment系统重启生效

配置文件优先级与加载顺序

优先级配置文件加载场景
1/etc/environment系统启动时最先加载
2/etc/profile用户登录时执行
3~/.bash_profile用户登录Shell加载
4~/.bashrc打开新终端时加载

getenv("MYSQL_CONF_PATH") 为获取指定环境变量的路径

1. 用户环境变量快速配置

  1. 利用vim进入~/.bashrc文档,摁住ctrl+g,直接跳到最后一行,摁一下i键,进入插入模式,现在可以编辑文档了。
  2. 跳到最后一个字符,摁一下换行,可以在下一行输入命令。
  3. 一般来说在Ubuntu的终端中,ctrl+shift+c是复制,Ctrl+shift+v是粘贴;
  4. 我们输入第一个环境变量配置:
    export PATH=$PATH:/opt/Qt5.13.2/Tools/QtCreator/bin/
    这条命令的含义为将/opt/Qt5.13.2/Tools/QtCreator/bin/路径添加入PATH路径中
    $PATH表示当前PATH的值,然后加上冒号和新的路径。冒号在Linux中用来分隔不同的路径。
    所以整个命令的作用是将Qt Creator的bin目录添加到PATH中,这样用户就可以在终端直接运行Qt Creator的工具,而不需要输入完整路径。

PATH是一个重要的环境变量,系统用它来查找可执行文件。当用户在终端输入命令时,系统会按照PATH中的路径顺序搜索对应的可执行文件。

当在bash中输入qtcreator指令时,系统会进行查找,最后去添加的环境变量下的路径里查找
此时路径下可以检测到qtcreator可执行文件即可执行

  1. 路径添加好了,该关闭~/.bashrc了,摁一下esc键,退出插入模式;

  2. 输入冒号:wq,关闭bashrc;

  3. 这时候还没有生效!需要source一下
    source ~/.bashrc此命令执行后配置立即生效

  4. 刚才配置的环境终于在这个终端生效了!

1.2 以上语句的具体解释:

  1. export
    表示要设置一个环境变量,且这个变量会被当前终端会话及其子进程继承。

  2. PATH
    是系统的环境变量,定义了可执行文件的搜索路径。当你在终端输入一个命令(如 ls 或 git)时,系统会按照 PATH 中列出的目录顺序查找对应的可执行文件。

  3. $PATH
    表示引用当前已存在的 PATH 值。例如,如果原本的 PATH 是 /usr/bin:/usr/local/bin,那么 $PATH 就代表这个字符串。

  4. :/opt/Qt5.13.2/Tools/QtCreator/bin/
    将新的路径追加到 PATH 中。冒号 : 是 Linux 中路径的分隔符,这里表示在现有路径的基础上,新增一个路径:/opt/Qt5.13.2/Tools/QtCreator/bin/。

最终效果:
执行命令后,系统会在原有路径的基础上,额外搜索 /opt/Qt5.13.2/Tools/QtCreator/bin/ 目录下的可执行文件。

例如,你可以直接在终端运行 qtcreator 命令(假设该目录下有 qtcreator 程序),而无需输入完整路径 /opt/Qt5.13.2/Tools/QtCreator/bin/qtcreator。

接下来是直接配置环境变量
只需要在.bashrc文件中填入如下语句:

export MYSQL_CONF=/home/kyros1ee/QtEnviroment/WeChat-main/chatserver/conf/mysql.conf# MYSQL_HOME
export MYSQL_HOME=/opt/module/mysql

export后接自定义的环境变量名=路径即可引入需要的环境变量
可以使用echo $PATH或其他环境变量名来检查环境变量是否添加成功:

在这里插入图片描述

1.3 $PATHNAME实现增量式添加

上面我们用了好几次这个美元符,这个符号是 什 么 意 思 呢 ? 直观的理解就是,直接调取当前环境变量的值 ,因此我们可以用这个PATH,来代替原本环境变量的路径,要是加东西的话,在前面或者后面加一个分号就行了~

利用$PATH在后面!增加!新的路径

export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="$DEMOPATH:/xxx/xxx/xx2x/"

打印结果如下:

/xxx/xxx/xx1x/:/xxx/xxx/xx2x/

确实在后面,效果是先调用之前的1,再在后面加上2;

利用$PATH在前面!增加!新的路径

export DEMOPATH="/xxx/xxx/xx1x/"
export DEMOPATH="/xxx/xxx/xx2x/:$DEMOPATH"

打印结果如下:

/xxx/xxx/xx2x/:/xxx/xxx/xx1x/

2.系统级永久配置与避坑指南

(1) 全局配置文件

sudo vim /etc/profile  
# 添加:  
export LANG="en_US.UTF-8"  
# 生效:重新登录或执行  
source /etc/profile

(2) 模块化配置(推荐)

# 创建独立配置文件  
sudo nano /etc/profile.d/myapp.sh  
# 内容:  
export API_ENV="production"  
# 新终端自动加载

(3) 环境变量专用文件

sudo nano /etc/environment  
# 直接写入(无需export):  
DB_HOST="127.0.0.1"

2.1 特殊字符处理

# 含空格路径必须引号包裹  
export DATA_DIR="/home/user/My Data"  # 包含$符号需转义  
export PWD="pa\$\$word"

2.2 动态PATH管理

# 安全追加PATH(防重复)  
if [[ ":$PATH:" != *":/new/path:"* ]]; then  export PATH="$PATH:/new/path"  
fi  # 数组形式管理(推荐)  
path_array=(  /usr/local/bin  $HOME/.local/bin  "${path_array[@]}"  
)  
export PATH=$(IFS=:; echo "${path_array[*]}")  

2.3 敏感信息保护

# 创建私有配置文件(设置600权限)  
chmod 600 ~/.env_secret  
# 内容:  
export DB_PASSWORD="s3cr3t!"  # 按需加载  
source ~/.env_secret  

2.4 环境调试命令

printenv         # 显示所有环境变量  
env | grep PATH  # 过滤特定变量  
export -p        # 查看已导出变量  

3. c++std中访问环境变量

stdlib.h中提供的接口

/* Execute the given line as a shell command.This function is a cancellation point and therefore not marked with__THROW.  */
extern int system (const char *__command) __wur;
/* Return the value of envariable NAME, or NULL if it doesn't exist.  */
extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;#ifdef __USE_GNU
/* This function is similar to the above but returns NULL if theprograms is running with SUID or SGID enabled.  */
extern char *secure_getenv (const char *__name)__THROW __nonnull ((1)) __wur;
#endif#if defined __USE_MISC || defined __USE_XOPEN
/* The SVID says this is in <stdio.h>, but this seems a better place.	*/
/* Put STRING, which is of the form "NAME=VALUE", in the environment.If there is no `=', remove NAME from the environment.  */
extern int putenv (char *__string) __THROW __nonnull ((1));
#endif#ifdef __USE_XOPEN2K
/* Set NAME to VALUE in the environment.If REPLACE is nonzero, overwrite an existing value.  */
extern int setenv (const char *__name, const char *__value, int __replace)__THROW __nonnull ((2));/* Remove the variable NAME from the environment.  */
extern int unsetenv (const char *__name) __THROW __nonnull ((1));
#endif#ifdef	__USE_MISC
/* The `clearenv' was planned to be added to POSIX.1 but probablynever made it.  Nevertheless the POSIX.9 standard (POSIX bindingsfor Fortran 77) requires this function.  */
extern int clearenv (void) __THROW;
#endif

接口提供的描述已足够清楚,这里放一个简单的例子

#include <stdlib>
int main()
{const char* configPath = getenv("MYSQL_CONF");	//if (!configPath){LOG_ERROR << " mysql.conf MYSQL_CONF_PATH not set!";return false;}ifstream file(configPath);if (!file.is_open()){LOG_ERROR << "mysql.conf 文件不存在!";return false;}
}
#include <stdlib>
#include <fstream>
#include <iostream>int main()
{std::system("ls -l >test.txt"); // 执行 UNIX 命令 "ls -l >test.txt"std::cout << std::ifstream("test.txt").rdbuf();
}
http://www.xdnf.cn/news/2816.html

相关文章:

  • 【Linux实践系列】:进程间通信:万字详解命名管道实现通信
  • 谷歌浏览器如何优化网页的视频播放体验【提升播放效果】
  • 二极管钳位电路——Multisim电路仿真
  • 数组滑动窗口单调栈单调队列trick集【leetcode hot100 c++速查!!!】
  • 遇到前后端半分离老项目的速度解决方法
  • 如何选择合适的RFID手持终端设备?
  • 【C++QT】Item Views 项目视图控件详解
  • Nginx支持HTTP2/HTTP3的并用CURL测试
  • RSYNC命令使用详解
  • JLink,程序烧写流程、步骤
  • 阿里语音处理工具ClearerVoice-Studio项目上手指南
  • 2302. 统计得分小于 K 的子数组数目 滑动窗口 or 前缀和+二分
  • 6. 页面对象开发的第一种实现方式:页面继承
  • 应用在通信网络设备的爱普生晶振SG2016CBN
  • Matplotlib可视化基础
  • 如何获取按关键字搜索京东商品详情(代码示例)
  • 无需手动重建!Altium到Cadence的封装转换:ASCII文件方法详解
  • LangChain4j +DeepSeek大模型应用开发——3 人工智能服务 AIService
  • 网工备考考纲变化总结
  • 【大模型ChatGPT+R-Meta】AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表“
  • AE插件中文汉化 RGB色彩通道分离故障复古视觉特效 RGB Split v1.0.0
  • watch 监视器
  • 剑指offer经典题目(七)
  • C语言高频面试题——局部变量和全局变量可以重名吗?
  • vs 安装完番茄助手visual assist 后 菜单栏不显示
  • mysql约束
  • Django 缓存框架
  • 同步电路与异步电路
  • 如何在 IntelliJ IDEA 中编写 Speak 程序
  • Spark知识总结