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 ...
随机推荐
- coredns使用etcd
前言 CoreDNS使用ETCD存储主机记录.etcd安装略过. Corefile内容 .:53 { # 绑定本机IP bind 192.168.1.2 # etcd地址 etcd { path /c ...
- ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记
总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...
- 使用C#创建安装Windows服务程序(最全教程)
开发语言:C# 开发环境: Visual Studio 2022 微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/windows-s ...
- Python实现商城购物经典案例
代码分步骤思路: 商城添加商品:opea_db = [{'store_name': '手机','num': 1}] while True: store_name=input('请输入需要存放的商品(按 ...
- Vue【原创】千位符输入框(不仅只是过滤器哦)
最近和一个做金融的朋友讨论到千位符输入的问题,后来一想貌似自己项目中也会经常碰到金额数字这种输入框,要么自己做一个吧. 首先肯定要有一个正则表达式,也就是过滤器的方案里面常用的正则: 1 filter ...
- 《SQL与数据库基础》22. 分库分表(二)
目录 分库分表(二) MyCat分片规则 范围分片 取模分片 一致性hash分片 枚举分片 应用指定算法 固定分片hash算法 字符串hash解析 按天分片 自然月分片 MyCat原理 MyCat管理 ...
- 《SQL与数据库基础》04. SQL-DQL
目录 DQL 基础查询 条件查询 分组聚合 聚合函数 分组查询 结果排序 分页限制 总结 本文以 MySQL 为例 DQL 语法结构: SELECT 字段列表 FROM 表名列表 WHERE 条件列表 ...
- Codeforces Round 882 div.2 B
Smiling & Weeping ----玫瑰花你拿才好看,风景要和你看才浪漫--<-<-<@ B. Hamon Odyssey time limit per test 1 ...
- JS深入学习笔记 - 第一章.构造函数原型与原型链
1.构造函数和原型 1.1 概述 在典型的 OOP语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前,JS并没有引入类的概念. 在ES6之前,对象不是基于类创建的 ...
- Solution -「洛谷 P6156」简单题
Description Link. 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^kf(\gcd(i,j))\gcd(i,j)\). Solution ...