利用shell脚本添加环境变量

在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误

error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory

但是如果把export那句话单独在命令行运行,在gcc编译代码后不会出现问题

怎么也想不通,为什么脚本执行了,设置了环境变量,但是运行可执行文件总是失败。

查看大牛博客,终于发现

原因是执行脚本用./test.sh的方式,如果采用source test.sh,则环境变量会生效。

./XXX.sh的时候,脚本里面打印PATH是改了,但是在终端echo $PATH却没有看到变化,因为这样执行等于说不在当前进程

那么。这是为什么呢?

关键:直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。

 

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

 

2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量)
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。

 

4、不用export定义的变量只对该shell有效,对子shell也是无效的。
另:
---- 在UNIX系统中,我们在运行shell程序或系统命令的过程如下:  

---- 假设在当前的shell环境下,我们运行ps -f命令.  

---- 首先,当前的shell会调用:fork()命令,产生一个subprocess,该子进程完全复制了父进程的所有环境;  

---- 之后,当前的shell会调用:exec ps -f命令,在新的子进程的环境中,运行ps -f 命令.子进程的环境变量会根据新的应用进行调整,并使之运行,当应用完成之后,子进程结束,返回到父进程.  

---- 因此,通过上述过程分析,$cbpsprofile的运行的结果就可以预见,该shell程序的运行,环境变量重新赋值仅仅在子进程中,程序运行完后,返回到父进程,父进程的环境变量是不会受到影响的
参考:
https://blog.csdn.net/xhz_1983/article/details/73250033
https://blog.csdn.net/wgembed/article/details/22385469
https://www.cnblogs.com/fdd566/p/6692595.html
https://blog.csdn.net/moqingxinai2008/article/details/53909464

 

转载于:https://www.cnblogs.com/zzdbullet/p/9953144.html

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

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

相关文章

2017 ACM-ICPC西安网赛B-Coin

B-Coin Bob has a not even coin, every time he tosses the coin, the probability that the coins front face up is \frac{q}{p}(\frac{q}{p} \le \frac{1}{2})​p​​q​​(​p​​q​​≤​2​​1​​). The question is, when Bob tosses the coin kktimes, whats the pr…

Java第四次作业

Dog dognew Dog("哈士奇","黑白",2);System.out.println(dog);}}class Dog {private String name;private String color;private int age;public String getName(){return name;}public String getColor(){return color;}public int getAge(){return age;}…

ITU-RBT.656视频标准接口

601是SDTV的数据结构 656是SDTV的interface 709是HDTV的数据结构 1120是HDTV的interface ITU-R BT.601是演播室数字电视编码参数标准,而ITU-R BT.656 则是ITU-R BT.601附件A中的数字接口标准, 用于主要数字视频设备(包括芯片)之间采用27Mhzs并口或243Mb…

C语言博客作业03--函数

1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周学习了函数,其实,函数于之前学习的三大控制结构是密不可分的,而函数又有其特殊的地方,例如:函数的声明、函数的调用等等。我们之前编写…

Shell记录-Shell命令(其他)

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 .命令格式 top [参数]Shell2.命令功能 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、…

Insta360:从软到硬,一年做出360°全景相机,中间填了多少坑?

摘要刘靖康在大学就开始创业。在大二的时候他曾经去腾讯实习,然后又去了“超级课程表”这个团队实习半年,2013 年 9 月回到南京创业,一开始的产品叫“名校直播”,是一款围绕院校名师讲座所做的视频直播产品。 不久前,一…

No.10 awk、变量、运算符、if多分支

awk、变量、运算符、if多分支 awk语法 ~ awk -F: {print $3,$4} /etc/passwd //-F指定:分隔符 默认以空格作为分隔符 ~ awk -F: {print &0,NF} //$0打印全部,NF有几段内容 ~ awk -F: {print $NF} /etc/passwd //$NF打印最后一段内容 ~ awk -F: {print NR} /etc/passwd…

什么是自然语言处理技术

自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进…

SDOI2005 区间

题目描述 现给定n个闭区间[ai, bi]&#xff0c;1<i<n。这些区间的并可以表示为一些不相交的闭区间的并。你的任务就是在这些表示方式中找出包含最少区间的方案。你的输出应该按照区间的升序排列。这里如果说两个区间[a, b]和[c, d]是按照升序排列的&#xff0c;那么我们有…

排序: 选择排序

1. 基本原理 将待排序的元素分为已排序(初始为空)和未排序两组&#xff0c;依次将未排序的元素中值最小的元素放入已排序的组中。 直接选择排序简单直观&#xff0c;但性能略差&#xff1b;堆排序是一种较高效的选择排序方法&#xff0c;但实现起来略微复杂。 2. 直接选择排序 …

JavaScript的值传递和引用传递

原文: Explaining Value vs. Reference in Javascript译者: Fundebug为了保证可读性&#xff0c;本文采用意译而非直译。另外&#xff0c;本文版权归原作者所有&#xff0c;翻译仅用于学习。 JavaScript有5种基本的数据类型&#xff0c;分别是&#xff1a;布尔、null、undefine…

全景摄像技术大有可为

网络摄像机发展至今&#xff0c;已经基本满足了“高清”、“日夜监控”、“远距离监控”的需求&#xff0c;但是 随着细分市场的发展&#xff0c;超广角摄像机需求逐渐凸显出来。主要应用在会议室、办公室、大厅/大堂、商场、仓库、车间等大面积开阔的区域&#xff0c;解决原来…

C#编程(五十三)----------字典DictionaryTKey,TValue

字典 关键字:Dicitionary 说明: 必须包含命名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由两个元组组成:键和值). 键必须是唯一的,而值不需要唯一的. 键和值都可以是任意类型(例如:string,int,自定义类型,等等) 通过一个键读取一个值的事件是接…

setInterval只执行一次的原因

1 setInterval(arrow(),2000) 改为&#xff1a; 1 setInterval(arrow,2000) 原因&#xff1a; arrow()这是一个函数调用&#xff0c;函数调用就会有返回值&#xff0c; 而arrow()没有返回值&#xff0c;所以这里的arrow()是一个undefined&#xff0c;自然你想要的循环执行arrow…

java文件传输之文件编码和File类的使用

---恢复内容开始--- 我们知道&#xff0c;在用户端和服务端之间存在一个数据传输的问题&#xff0c;例如下载个电影、上传个照片、发一条讯息。在这里我们 就说一下文件的传输。 1.文件编码 相信大家小时候玩过积木&#xff08;没玩过也看过吧&#xff09;&#xff0c;看到一个…

Android 模拟输入那点事

因工作原因&#xff0c;需要用到模拟输入这个东东&#xff0c;查阅了一些资料&#xff0c;实现方式有多种&#xff0c;我大概分为两类&#xff0c;命令行类和程序类。 命令行类包括自动化测试组件monkeyrunner&#xff0c;getevent/setevent命令&#xff0c;input命令 程序类包…

arm-linux-gcc:Command not found的问题

标签&#xff1a; ubuntulinux 2015-05-15 10:47 680人阅读 评论(0) 收藏 举报 分类&#xff1a; Ubuntu&#xff08;23&#xff09; /etc/profile gcc&#xff08;9&#xff09; ARM汇编指令&#xff08;4&#xff09; 折腾了一天&#xff0c;终于搞定了。 ubuntu没有roo…

[No0000111]java9环境变量配置bat

保存成bat&#xff08;utf-8 无签名 编码&#xff09; 右键以管理员权限运行 修改JAVAINSTALLPATH 为JAVA SDK 安装目录&#xff08;默认用C:\PROGRAM FILES\JAVA\&#xff09;即可&#xff1b; 只在 用户变量下 创建&#xff0c;会事先保存好用户原有的“JAVA_HOME,JRE_HOME,P…

去掉浮夸,空杯心态重新面对测试

刚开始一头扎进软件测试行业&#xff0c;从踏踏实实的机械化功能测试&#xff0c;到学会和甲方扯皮&#xff0c;到被鄙视的五体投地后抓紧修炼表面功夫来忽悠人&#xff0c;学的最多的反而是怎么与人交流。第一次面对跳槽的机会&#xff0c;我竟然发现自己的测试能力不升反降。…

PASTE Splay

题目描述 我们用文本处理器来处理一个特殊的文本文件&#xff0c;该文本文件共有N行文本&#xff0c;每一行文本仅包含一个自然数&#xff0c;第一行为1、第二行为2&#xff0c;以此类推至N行为自然数N。   假设对该文本文件执行一次“剪切和粘贴”操作含义如下&#xff1a;…