Linux:点命令source
相关阅读
Linux
https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482
source命令用于读取一个文件的内容并在当前Shell环境(包括交互式Shell或是非交互式Shell)执行里面的命令。它被称为点命令是因为命令名source也可以替换为一个点“.”。
下面是该命令的语法。
用法
. filename [arguments]
source filename [arguments]
参数
filename 指定要读取并执行命令的文件名,一般是一个文本文件。
arguments 指定源文件执行时的位置参数。
一般情况下,如果在交互式Shell中使用bash命令执行一个脚本,会创建一个Bash子进程。在某些情况下,这导致问题,比如在脚本中使用export命令导出一个变量时,它会成为该Bash子进程的环境变量,而对父进程Bash没有影响,这类似于在Bash中直接使用bash命令创建一个Bash子进程。
[***@EDA ~]$ bash #在当前进程运行另一个bash子进程
[***@EDA ~]$ export aaa=1 #在子进程创建环境变量
[***@EDA ~]$ export
*****
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT="seat0"
declare -x XDG_SESSION_DESKTOP="gnome-classic"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x XDG_VTNR="1"
declare -x XMODIFIERS="@im=ibus"
declare -x aaa="1" #环境变量存在于子进程
[***@EDA ~]$ exit #退出子进程
exit
[***@EDA ~]$ export
*****
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT="seat0"
declare -x XDG_SESSION_DESKTOP="gnome-classic"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x XDG_VTNR="1"
declare -x XMODIFIERS="@im=ibus"
#环境变量不存在于父进程scripts文件
#!/bin/bash
export bbb=1[***@EDA ~]$ bash scripts
[***@EDA ~]$ export
*****
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT="seat0"
declare -x XDG_SESSION_DESKTOP="gnome-classic"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x XDG_VTNR="1"
declare -x XMODIFIERS="@im=ibus"
#环境变量不存在于父进程
在上例中如果使用source命令执行该bash脚本,则会读取脚本内的内容(对上例而言是export bbb=1)并在当前Shell环境(对上例是交互式Shell)执行,就像是直接在交互式Shell中执行export bbb=1一样,因此可以成功导入环境变量,如下所示。
scripts文件
#!/bin/bash
export bbb=1[***@EDA ~]$ source ./scripts
[***@EDA ~]$ export
*****
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT="seat0"
declare -x XDG_SESSION_DESKTOP="gnome-classic"
declare -x XDG_SESSION_ID="1"
declare -x XDG_SESSION_TYPE="x11"
declare -x XDG_VTNR="1"
declare -x XMODIFIERS="@im=ibus"
declare -x bbb="1" #环境变量成功创建
source命令常用于立即将更改后的.bashrc配置文件应用于当前环境,而无需新建Bash。
Linux:设置别名命令alias一文中曾经提到,在非交互式的Bash脚本中,别名替换默认被关闭了,除非在脚本中使用shopt命令开启expand_aliases选项。如果此时使用source命令执行脚本,则别名替换可以正常进行,因为这相当于执行环境是交互式Shell。
scripts文件
#!/bin/bash#无需启用别名展开
#shopt -s expand_aliasesalias tt='echo 111' # 定义别名
tt # 使用别名[***@EDA ~]$ source ./scripts
111
下面是一些source命令的规则。
如果pathname不包含斜杠(/),Bash将首先在环境变量PATH列出的目录中查找该文件,这与很多其他命令不同,一般情况下一个不含/的文件名相当于使用相对路径,即./文件名。
[***@EDA ~]$ source script #直接使用文件名,注意此处文件名是scripts
bash: source: /usr/bin/script: cannot execute binary file #在PATH中查找到了一个二进制文件,source命令执行失败
如果使用shopt命令关闭sourcepath选项,则source不会搜索PATH。
[***@EDA ~]$ shopt -u sourcepath
[***@EDA ~]$ source script #直接使用文件名,注意此处文件名是scripts
bash: scripts: No such file or directory #在当前目录,无法找到文件scripts
当Bash不处于POSIX模式时,如果在PATH中找不到文件,则还会在当前目录中搜索(此时相当于./文件名)。
[***@EDA ~]$ set -o | grep posix #查看是否处在posix模式
posix off
[***@EDA ~]$ source scripts #直接使用文件名,最后在当前目录查找到了scripts脚本
文件不必须是可执行的文件,它可以是一个简单的文本文件,而不具有可执行的属性。
如果提供了任何arguments,它们将作为位置参数($0, $1...)传递该文件内的命令,需要注意的是,这里有一点特殊,传递给source的位置参数不会改变当前Shell环境的位置参数,这就像是这些位置参数在执行文件内部的命令时生效(这是对当前环境位置参数的保护)。另外需要说明的是,如果不传递参数,source执行的文件依然可以访问到当前环境的位置参数。
script文件
echo $1
echo $2[***@EDA ~]$ source ./script Hello World #传递参数
Hello #可以访问$1(这是source传递的)
World #可以访问$2(这是source传递的)
[***@EDA ~]$ echo $1 $2
(nothing output) #source传递的位置参数不会影响当前进程
[***@EDA ~]$ set -- Hello World #设置位置参数
[***@EDA ~]$ source ./script #不传递参数
Hello #可以访问$1(这是当前环境的)
World #可以访问$2(这是当前环境的)
[***@EDA ~]$ echo $1 $2
Hello World
source命令的返回值是脚本中最后一个退出的命令的状态(如果没有执行任何命令,则直接返回 0),如果找不到或无法读取文件,则返回false。
[***@EDA ~]$ source ss
bash: source: /usr/sbin/ss: cannot execute binary file
[***@EDA ~]$ echo $?
126
[***@EDA ~]$ source ./script
Hello
World
[***@EDA ~]$ echo $?
0
相关文章:
Linux:点命令source
相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 source命令用于读取一个文件的内容并在当前Shell环境(包括交互式Shell或是非交互式Shell)执行里面的命令。它被称为点命令是因为命令名source也可…...
iOS开发 - 转源码 - __weak问题解决
iOS开发 - 转源码 - __weak问题解决 在使用clang转换OC为C代码时,可能会遇到以下问题 cannot create __weak reference in file using manual reference 原因 __weak弱引用是需要runtime支持的,如果我们还只是使用静态编译,是无法正常转换的…...
【Linux基础】dash和bash简介
Dash(Debian Almquist Shell)和 Bash(Bourne Again Shell)是 Unix/Linux 系统中的命令行 shell,用于执行命令、管理文件系统、编写脚本等任务的工具。 一、Dash和Bash的区别: Bash(Bourne Agai…...
精读《如何做好 CodeReview》
1 引言 任何软件都是协同开发的,所以 CodeReview 非常重要,它可以帮助你减少代码质量问题,提高开发效率,提升稳定性,同时还能保证软件架构的稳定性,防止代码结构被恶意破坏导致难以维护。 所以 CodeRevie…...
双指针(滑动窗口)-算法刷题
一.移动零(. - 力扣(LeetCode)) 算法思想 : 设置两个指针left,right,将数组分为三块[0,left]为不为0的元素,[left1,right-1]为0元素,[right,num.size()-1]为未扫描的区域,…...
上位机图像处理和嵌入式模块部署(qmacvisual之ROI设定)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 ROI,全称是region of interest,也就是感兴趣区域。这里面一般分成两种情况,一种是所有的算法都依赖于这个ROI&a…...
银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report
人民银行金融统计数据大集中自动化报送系统(简称PBOC Report),是基于现代计算机网络技术应用基础上,由人行总行设置金融统计数据服务器,建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…...
常用中间件redis,kafka及其测试方法
常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个:1、提升性能常用的中间件:1) 高速缓存:redis2) 全文检索:ES3) 存日志:ELK架构4) 流量削峰:kafka 2、提升可用性产品架构中高可…...
ROS1通过rosbridge在局域网中控制turtle进行运动(PC和手机)
通过ROSbridge控制小海龟(turtlesim)的具体案例。使用一个简单的Python脚本通过通过局域网上连接上传ROSbridge服务器,并发送速度指令来控制小海龟的移动 功能包的结构如下: HTML文件的编写(界面) html用…...
MQ高级篇---消息可靠性
MQ的一些常见问题 后面内容基于springboot 2.3.9.RELEASE 消息可靠性 生产者确认机制 在publisher微服务中application.yml中添加 spring:rabbitmq:publisher-confirm-type: correlatedpublisher-returns: truetemplate:mandatory: true每个RabbitTemplate只能配置一个Return…...
SpringMVC | SpringMVC中的 “文件上传和下载”
目录: 一、文件上传1.1 文件上传“概述”1.2 文件上传“具体配置” :“前端”中配置“文件上传” ( type“file” 满足3个条件 )“后端”中配置“文件上传” ( 配置id为“CommonsMultipartResolver”的bean 配置“文件上传”的“约束条件” 通过“MultipartFile接口”参数接…...
JVM快速入门(2)HotSpot和堆、新生区、永久区、堆内存调优、JProfiler工具分析OOM原因、GC(垃圾回收)、JVM经典面试笔试题整理
5.6 HotSpot和堆 5.6.1 Hotspot 三种JVM: Sun公司,HotspotBEA,JRockitIBM,J9 VM,号称是世界上最快的Java虚拟机 我们一般学习的是:HotSpot 5.6.2 堆 Heap,一个JVM只有一个堆内存,…...
我的风采——android studio
目录 实现“我的风采”页面要求理论代码生成apk文件 实现“我的风采”页面 要求 要求利用’java框架的边框布局实现“找的风采 ”页而,其中中间为你的生活照,左右和下面为按钮,上面为标签 理论 Java GUI编程是Java程序设计的重要组成部分…...
BMS设计中的短路保护和MOSFET选型(上)
电池管理系统(BMS)是一种能够对电池进行监控和管理的电子装备,是电池与用户之间的纽带。通过对电压、电流、温度以及SOC等数据采集,计算进而控制电池的充放电过程,主要就是为了能够提高电池的利用率,防止电…...
用go实现一个任务调度类 (泛型)
用go实现一个任务调度类 (泛型) 源码地址: https://github.com/robinfoxnan/BirdTalkServer/blob/main/server/core/workmanager.go 1.概述 实现了一个简单的任务管理系统,允许用户定义任务和工作者,并将任务分配给…...
ansible 管理工具以及常用模块
一、前期准备 1、安装 yum install ansible 如果yum源没有ansible,需要提前配置yum源: mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup wget -O…...
javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目
一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发)MAVEN方式加 载,系统具有完整的源代码和…...
蓝桥杯day11刷题日记
P8615 [蓝桥杯 2014 国 C] 拼接平方数 思路:先把数据范围内的平方数打上标记,然后就是遍历这个区间,转成字符串(好拆数据),用substr拆开数据,再强转成整数类型,最后查看拆开的数据是…...
IDEA, Pycharm, Goland控制台乱码
IDEA, Pycharm, Goland控制台乱码 问题描述: 控制台出现����等乱码 复现频率: 总是 解决方案: 以IDEA为例 添加 -Dfile.encodingUTF-8位置 idea64.exe.vmoptions 在安装idea的bin目录idea.vmoptions idea客户端 示意图...
JavaScript单元测试jasmine学习(一)
介绍: jasmine是用于测试JavaScript的一种测试框架,BDD(Behavior Driven Development)行为驱动开发。不依赖于任何其他JavaScript框架,也不需要DOM 准备工作: 1. 首先添加jasmine到自己的项目中 npm install --save-dev jasmine 2. 在项目…...
告别BLAST卡顿!用FastANI和Skani快速搞定微生物基因组ANI计算(附实战对比)
微生物基因组分析提速指南:FastANI与Skani的性能对决与实战应用 当实验室的测序仪日夜不停地吐出海量微生物基因组数据时,生物信息学分析流程中的ANI计算环节往往成为效率瓶颈。传统BLAST-based方法在应对数十甚至上百个基因组比较时,不仅耗时…...
如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术:终极完整指南
如何通过 proc-macro-workshop 快速掌握 Rust 代码生成技术:终极完整指南 【免费下载链接】proc-macro-workshop Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019] 项目地址: https://gitcode.com/gh_mirrors/…...
你的ESP32项目还缺个BGM?手把手教你做个可切换歌单的迷你音乐播放器
为ESP32项目打造智能音乐模块:从蜂鸣器驱动到歌单管理系统 当你的智能家居设备在清晨用一段舒缓旋律唤醒你,或是机器人完成指令时播放一段俏皮的提示音,这种交互体验会瞬间提升产品的温度。ESP32作为一款功能强大的物联网芯片,完全…...
实战指南,基于快马平台快速构建用于工业质检的yolo缺陷检测系统
今天想和大家分享一个很实用的工业质检项目实战经验——基于YOLO模型快速搭建零件缺陷检测系统。这个项目特别适合需要快速验证算法效果的场景,我在InsCode(快马)平台上只用半天就完成了从原型到部署的全流程。 项目背景与需求分析 工业质检对精度和实时性要求很高&…...
告别Keil C51安装烦恼:STC8单片机开发环境保姆级配置指南(含芯片包添加)
从零搭建STC8开发环境:Keil C51避坑指南与实战技巧 第一次接触STC8单片机时,最让人头疼的莫过于开发环境的搭建。网上教程要么过于简略,要么步骤不全,总会在某个环节卡住——可能是Keil安装报错,可能是芯片包添加失败&…...
Ubuntu 配置 Claude Code + MiniMax
先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...
OpenClaw飞书机器人进阶:集成Kimi-VL-A3B-Thinking多模态对话能力
OpenClaw飞书机器人进阶:集成Kimi-VL-A3B-Thinking多模态对话能力 1. 为什么需要多模态飞书机器人 去年我们团队开始使用飞书作为主要协作工具,但很快发现一个痛点:当讨论涉及图片、图表或复杂文档时,传统的文本机器人显得力不从…...
C语言完美演绎7-1
/* 范例:7-1 */#include<stdio.h>void main(){int MyArray1[]{1,2,3,4,5}; /* 同MyArray[5]{1,2,3,4,5}; */int MyArray2[5]{1,2,3}; /* 元素值少于五个时,数组的初始化会把不足的数组元素以0取代 */for(int i0;i<5;i)printf("MyArray…...
SpringBoot + 本地事务表 + 定时扫描补偿:轻量级方案实现最终一致性,无中间件依赖
在分布式系统中,数据一致性是一个永恒的话题。传统的分布式事务解决方案如 Seata、XA 等往往需要引入重量级中间件,增加了系统复杂度和运维成本。 本文将介绍一种轻量级的最终一致性方案——本地事务表 + 定时扫描补偿,该方案: 零中间件依赖:不需要 MQ、Seata 等外部组件…...
如何从零搭建Cubli_Mini:开源自平衡机器人完整制作指南
如何从零搭建Cubli_Mini:开源自平衡机器人完整制作指南 【免费下载链接】Cubli_Mini 项目地址: https://gitcode.com/gh_mirrors/cu/Cubli_Mini Cubli_Mini是一款令人惊叹的开源自平衡立方体机器人项目,它通过三个正交安装的飞轮实现姿态控制&am…...
