Bash—source命令&export命令&bashrc文件
当不使用 source 命令执行脚本时,会创建一个子 shell,在该子 shell 中执行完脚本后退出子 shell。不是用 export 定义的变量只对该 shell 有效,对子 shell 是无效的。如下图所示,一开始 VA 没有用 export 定义,所以第一次执行 test.sh 脚本时子 shell 访问不到父 shell 定义的 VA,输出空。只有使用 export 定义的变量才会被复制到子 shell 中,如下图重新用 export 定义了 VA,第二次执行 test.sh 时成功输出了 VA 的值。子 shell 中对变量的修改是无法影响到父 shell 中变量的值,比如说在 test.sh 中执行 VA=123,当执行完 test.sh 后,输出 VA 的值依旧等于 45。

source 命令用于执行一个脚本,但它不像直接执行脚本时,会新建一个子 shell,它是在当前 shell 执行脚本。如下图所示,我并没有用 export 定义 VB,当直接执行 test.sh 脚本时,输出空值,访问不到 VB 变量,但当使用 source 执行 test.sh 时,它成功输出了 VB 的值,并保存了对 VB 的修改。

source 命令的另一个用途,是在脚本内部加载外部库。下面脚本在内部使用 source 命令加载了一个外部库,然后就可以在脚本里面,使用这个外部库定义的函数。source 有一个简写形式,可以使用一个点(.)来表示,比如. test.sh和source test.sh是一样的。
source ./lib.sh
function_from_lib
export 命令常用来修改环境变量,比如执行export PATH=$PATH:~,那么就可以在任何目录下执行 test.sh 脚本,因为 Linux 会去 PATH 变量包含的路径下寻找 test.sh,如果存在多个 test.sh,那么只会执行第一个找到的 test.sh。export 设置环境变量是暂时的,只在本次登录中有效,可修改如下文件来使命令长久有效:
- 修改 profile 文件,执行命令
echo 'export PATH=$PATH:~' >> /etc/profile和source /etc/profile,但修改这个文件对所有用户都会产生影响,所以不建议使用这个。 - 修改当前用户根路径下的
~/.bashrc文件,执行命令echo 'export PATH=$PATH:~' >> ~/.bashrc和source ~/.bashrc,这样就只对当前用户生效,不会影响到其它用户。
bashrc文件主要保存个人的一些个性化设置,如命令别名、路径等,每次修改 .bashrc后,使用 source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。一般会在.bash_profile文件中显式调用.bashrc。登陆 linux 启动 bash时首先会去读取 ~/.bash_profile文件,这样 ~/.bashrc也就得到执行了,你的个性化设置也就生效了。利用这一特性,可以实现一些个性化设置,如:Linux 系统开机执行自动某个脚本文件等,这在自动化运维方面有一定的用处。比如在~/.bashrc中追加以下命令:
echo 'Hello world'
python3 /home/username/test.py
那么在开机时 shell 就会输出 Hello world并执行 test.py 脚本
Bash—source命令&export命令&bashrc文件的更多相关文章
- Linux中使用export命令设置环境变量
Linux export 命令 2011-08-31 22:36:39| 分类: 命令总结|举报|字号 订阅 功能说明:设置或显示环境变量. ######################## ...
- linux下export命令添加、删除环境变量(转载)
转自:http://blog.csdn.net/shenshendeai/article/details/49794699 export命令 功能说明:设置或显示环境变量. 语 法:export [- ...
- 00006 - Linux中使用export命令设置环境变量
功能说明:设置或显示环境变量. #################################################################################### ...
- linux下export命令添加删除环境变量
Linux export命令参数 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量. ...
- alias命令(使用命令别名)
通过alias命令可以给一些命令定义别名,如,将长的难记住的命令起一个容易记住的别名,提高工作效率 alias -p 查看已有的别名列表 命名别名格式: alias 新命令名='原命令名 -参数/选项 ...
- linux source命令与export命令的区别
shell与export命令 用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序.运行shell脚本程序 ...
- ~/.bashrc文件写错, 导致Linux全部命令丢失
问题 今天写bashrc文件的时候, 不小心把PATH结尾带错了,当时不知道,直接就source了, 后来出来的时候发现命令全部提示找不到了... 解决 重新赋予环境变量PATH就行 export P ...
- 修改.bashrc文件PATH变量错误导致系统大部分命令失效
修改.bashrc环境变量,在文件最后添加openssl变量, 本来应该写 export PATH=$PATH:/usr/local/openssl/bin 误写成 export PATH=/usr/ ...
- Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- linux 命令 htop & 重定向 top, bashrc文件
最近在用linux服务器跑程序,有几条linux命令还蛮重要的,总结一下: 1. 直接跑代码: python test.py 2. 若想程序在后台跑,即使本地和服务器断开也能运行: nohup pyt ...
随机推荐
- CTC蜀道会:第一次圆桌会圆满结束
近期,成都.NET俱乐部核心成员经过讨论会,我们成立了CTC蜀道会,它是一个专注于创业历程.研发管理.AIGC.副业之路..NET.Vue.微软技术.开源技术等领域的社区,立足于蓉城成都,致力于连接同 ...
- Pandas 使用教程 Series、DataFrame
目录 Series (一维数据) 指定索引值 使用 key/value 对象,创建对象 设置 Series 名称参数 DataFrame(二维数据) 使用字典(key/value)创建 loc 属性返 ...
- Mybatis-plus SQL效率插件PerformanceInterceptor无效->替换为p6spy
使用mybatis-plus时,需要加入执行的sql分析 发现mybatis-plus中的PerformanceInterceptor无效了 查了信息发现 3.2.0 版本之后把这个功能可剔除了 可同 ...
- JWT(Json Wen Token)原理剖析
JWT(即json web token),大家先看下面这张图 大家可以观察到,jwt String就是生成后的jwt字符集,其中有两个 "."(注意:jwt校验会对".& ...
- 我的新书《Flink大数据分析实战》出版啦
- [htmlayout] csss! 改变值/文本
<input type="text" value="123" /> <div class="test">内容内容&l ...
- MIMO雷达中波形复用/分离的方法------TDMA\FDMA\DDMA\CDMA
最先接触到MIMO雷达的波形复用/分离的方法还是工作中负责的TI1843项目中了解的,主要还是时分多址波形(TDMA),当时刚接触时对这些很疑惑,再加上后面看到了频分多址波形(FDMA).码分多址波形 ...
- Record - Nov. 28st, 2020 - Exam. REC
Prob. 1 Desc. & Link. 暴力为 \(\Theta(NK)\). 正解(也许): 把每一个全为正整数的子段找出来. 然后判断一下中间连接的情况即可. 但是这样决策情况太多了. ...
- linux内核离线升级步骤详解【亲测可用】
由于种种原因,linux的内核版本需要升级,但由于生产原因往往不能在线升级,在此记录笔者本人昨晚的的离线升级步骤,亲测可用. 我们知道,红帽和CentOS同源同宗,内核升级步骤也是一样的. 目录 ■ ...
- 传纸条 luoguP1006
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排坐成一个 mm 行 nn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈 ...