| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> shell脚本中export命令未生效,原因详解 -> 正文阅读 |
|
[系统运维]shell脚本中export命令未生效,原因详解 |
1.问题发现 ? 安装?jemalloc 后,执行?/usr/bin/jemalloc.sh 脚本生效环境变量?LD_PRELOAD。执行过后发现环境变量并未生效。过程如下:
NOTE:当时意识到可能是脚本执行姿势不对,因为通常使用 source /root/.bash_profile 命令来生效用户环境变量。换成 source 执行后,环境变量确实生效了,如下:
2.解决方案 ? 着急的朋友可以直接看解决方案如果想shell 脚本中的 export 生效,需要通过 source 命令执行脚本,如: source jemalloc.sh 3.问题原因分析 ? 讲解这个问题前,我们需要先知道如下三个知识点: 3.1 变量(环境变量,自定义变量) ? 1)环境变量和自定义变量区别 变量分为环境变量和自定义变量。环境变量是全局的,可以被子进程继承。自定义变量是局部变量,不可被子进程继承。 ? 2)子进程可以继承父进程环境变量 启动一个shell,os会分配一个记忆块给shell使用,此内存内的变量可以让子进程取用。若父进程使用export 命令定义了一个环境变量,该环境变量会写入到上述的内存中。当该父进程启动一个子进程时,子进程会把父进程该内存块中记录的环境变量导入到自己的记忆块中。 ?3)变量显示命令 显示环境变量的命令: env 或者 export 显示环境变量+自定义变量+shell函数 set 3.2 父进程和子进程 ?? 3.3 脚本执行方式区别 source , sh, ./? 不同方式执行脚本的区别: source某脚本时,是在当前shell中执行,并未创建子进程(子shell)。 sh某脚本或./某脚本时,会创建子shell,在子进程中进行脚本的执行。 ./要求该用户对执行的脚本有执行权限,sh无要求。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:46:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |