source 与 shell 之详解(Detailed Explanation of Source and Shell)

 source 命令与 shell 变量

随着IC工具的升级迭代,不同项目使用到的 IC 工具版本可能会不一样。为保证 IC 工具版本和芯片项目的对应,需要使用 source 命令执行对应项目的环境变量设置脚本。那么,source 命令与一般的脚本执行命令,有什么区别呢?

下面以 bash 环境为例进行详细说明。

1. shell 与局部变量、环境变量

用户登录到 Linux 系统后,可以以终端交互的方式打开一个用户 shell,暂且称之为父shell。在这个shell 中,用户可以使用 shell命令,声明变量,或者运行shell 脚本。

当用户运行 shell 脚本时,系统将创建一个子 shell。子 shell 运行完毕,将返回到之前父shell。一个父shell,可以派生出很多的子 shell。

在父 shell或子 shell 定义的变量只能在当前 shell 中引用。这些变量称之为局部变量。

例如,在一个shell 窗口中运行以下命令:

c="ccc" ; echo $c

显示:

ccc

创建一个脚本c.sh, 内容如下:

#!/bin/bashecho $c

在当前 shell 中运行此脚本 c.sh,将不会有任何显示:如果父shell 的变量需要被其他子 shell 进行引用、修改,需要使用 export 命令对其进行变量输出。此类变量称为环境变量。环境变量是全局性的。

例如,在shell 窗口中运行以下命令:

export c="ccc" ; echo $c

同样创建脚本c.sh, 内容如下:​​​​​​​

#!/bin/bashecho $c

在当前 shell 中运行此脚本 c.sh,

./c.sh

便会显示变量 c 的值:

ccc

如果 shell 脚本中的变量需要被其他父或子shell 进行引用,除了需要使用 export 命令,还需要使用 source 命令运行脚本文件。这是什么原理呢?

2. source 命令

source命令用于执行shell 类型的脚本文件。

source命令也被称为“点命令”,在bash 中 等同于 "." 命令。例如执行一个脚本文件 test.sh , 以下两行命令是等效的。​​​​​​​

. test.shsource test.sh

对于一个可执行脚本 test.sh,使用 ./test.sh、sh test.sh和 source test.sh 的区别如下:

  • (1) 当 test.sh 脚本具有可执行权限时,./test.sh、sh test.sh 是没有区别的。两者都会创建一个子shell 执行对应的脚本命令。

  • (2) 当 test.sh 没有执行权限时,只能使用 sh test.sh。执行 ./test.sh 命令会报错。

  • (3) source test.sh 只是简单地读取脚本中的命令,并在当前 shell 里执行,并不会创建新的子shell。

    总结就是,使用 source 执行脚本文件时,只会在当前shell执行,不会创建新的子 shell,脚本文件中 export 命令对应的变量会输出为全局的环境变量。所以,source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销、重新登录。

例如,shell中创建环境变量 P1,其中冒号“:”表示追加 :

export P1=/test/dir1:/test/dir2”

创建脚本 test.sh:​​​​​​​

#!/bin/bashecho $P1export P1=$PATH:/test/h3:/test/h4echo $P1

shell 窗口中运行脚本  ./test.sh,结果如下:​​​​​​​

/test/dir1:/test/dir2/test/dir1:/test/dir2:/test/h3:/test/h4

shell 窗口中运行命令 echo $P1,结果如下:​​​​​​​

echo $P1/test/dir1:/test/dir2

这是因为子shell 中的变量 P1 并不能被父shell 继承。

shell 窗口中使用 source 命令运行脚本  ./test.sh,显示一样的结果

source test.sh/test/dir1:/test/dir2/test/dir1:/test/dir2:/test/h3:/test/h4

shell 窗口中再次运行命令 echo $P1,此时结果如下:​​​​​​​

echo $P1/test/dir1:/test/dir2:/test/h3:/test/h4

因为使用 source 命令后,脚本内容在当前shell 中执行,P1 被 export 输出为环境变量,父shell 中可以对 P1 环境变量进行引用。

3. 其他相关命令

(1) C shell 中设置环境变量的方法

setenv P1 "$P1 /test/h3 /test/h4"
(2) 清除环境变量 P1的命令为:
unset P1

(3) 显示所有环境变量

env

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

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

相关文章

2024~2025学年佛山市普通高中教学质量检测(一)【高三数学】

一、选择题 本题共8小题&#xff0c;每小题5分&#xff0c;共40分。在每小题给出的四个选项中。只有一项是符合题目要求的。 1、若 5 z 2 i 1 \frac{5}{z}2i1 z5​2i1&#xff0c;则 z z z A. 1-2i B. 12i C. 2-i D. 2i2、已知集合 A { x ∣ 1 < x < a } A\left\{…

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已成为众多应用的核心技术。检索增强生成&#xff08;RAG&#xff09;&#xff08;RAG 系统从 POC 到生产应用&#xff1a;全面解析与实践指南&#xff09;和缓存增强生成&#xff08;CAG&#x…

anaconda中可以import cv2,但是notebook中cv2 module not found

一、问题 anaconda中成功import cv2 但是jupyter notebook中却无法导入cv2 二、排查 anaconda中使用python路径如下&#xff1a; jupyter notebook中使用python路径如下&#xff1a; 可以发现路径不一致。 三、解决 ①查看可用的kernel ②选中想要修改的kernel&#xff0c;打…

【数据结构】_栈的结构与实现

目录 1. 栈的相关概念与结构 2. 栈的实现 2.1 栈实现的底层结构选择 2.2 Stack.h 2.3 Stack.c 2.4 Test_Stack.c 1. 栈的相关概念与结构 1、栈&#xff1a;一种特殊的线性表&#xff0c;只允许在固定的一端插入和删除数据&#xff1b; 允许进行数据插入和删除操作的一端…

mysql的cpu使用率100%问题排查

背景 线上mysql服务器经常性出现cpu使用率100%的告警&#xff0c; 因此整理一下排查该问题的常规流程。 1. 确认CPU占用来源 检查系统进程 使用 top 或 htop 命令&#xff0c;确认是否是 mysqld 进程导致CPU满载&#xff1a;top -c -p $(pgrep mysqld)2. 实时分析MySQL活动 …

某团面试题①—kudu读写流程

kudu 读写流程 前言 为什么会有kudu&#xff1f;先贴一个经典的图。 kudu诞生之前大数据的主要2种方式存储 静态数据 以hdfs引擎作为存储引擎&#xff0c;适用于高吞吐量的离线大数据分析场景&#xff0c;缺点是实现随机读写性能差&#xff0c;更新数据难 动态数据 以Hbase…

Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问

1. 在Linux服务器上部署DeepSeek模型 要在 Linux 上通过 Ollama 安装和使用模型&#xff0c;您可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;安装 Ollama 安装 Ollama&#xff1a; 使用以下命令安装 Ollama&#xff1a; curl -sSfL https://ollama.com/download.…

go并发和并行

进程和线程 进程&#xff08;Process&#xff09;就是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;每一个进程都有一个自己的地址空间。…

element-ui rate 组件源码分享

评分组件&#xff0c;从三个方面分享&#xff1a; 1、页面结构。 2、组件属性。 3、组件方法。 一、页面结构&#xff1a; 主要有图标的、图标(默认或自定义图标)文字的、图标分数的。 二、属性。 2.1 value 2.2 max 最大分数。 2.3 disabled 是否只读 2.4 allow-half 是…

python学opencv|读取图像(五十六)使用cv2.GaussianBlur()函数实现图像像素高斯滤波处理

【1】引言 前序学习了均值滤波和中值滤波&#xff0c;对图像的滤波处理有了基础认知&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;五十四&#xff09;使用cv2.blur()函数实现图像像素均值处理-CSDN博客 python学opencv|读取图像&#xff08;…

HIVE如何注册UDF函数

如果注册UDF函数的时候报了上面的错误&#xff0c;说明hdfs上传的路径不正确&#xff0c; 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径&#xff0c;这样在创建函数时&#xff0c;引用下面的地址就可以创建成功

紧跟潮流,将 DeepSeek 集成到 VSCode

Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发的免费开源代码编辑器&#xff0c;自 2015 年发布以来&#xff0c;凭借其轻便、强大、且拥有丰富扩展生态的特点&#xff0c;迅速成为了全球开发者的首选工具。VSCode 支持多平台操作系统&#xff0c;包…

HAL库 Systick定时器 基于STM32F103EZT6 野火霸道,可做参考

目录 1.时钟选择(这里选择高速外部时钟) ​编辑 2.调试模式和时基源选择: 3.LED的GPIO配置 这里用板子的红灯PB5 4.工程配置 5.1ms的systick中断实现led闪烁 源码: 6.修改systick的中断频率 7.systick定时原理 SysTick 定时器的工作原理 中断触发机制 HAL_SYSTICK_Co…

DeepSeek与llama本地部署(含WebUI)

DeepSeek从2025年1月起开始火爆&#xff0c;成为全球最炙手可热的大模型&#xff0c;各大媒体争相报道。我们可以和文心一言一样去官网进行DeepSeek的使用&#xff0c;那如果有读者希望将大模型部署在本地应该怎么做呢&#xff1f;本篇文章将会教你如何在本地傻瓜式的部署我们的…

【重新认识C语言----文件管理篇】

目录 ​编辑 -----------------------------------------begin------------------------------------- 引言 1. 文件的基本概念 2. 文件指针 3. 文件的打开与关闭 3.1 打开文件 3.2 关闭文件 4. 文件的读写操作 4.1 读取文件 4.1.1 使用fgetc()读取文件 4.1.2 使用fg…

全面解析String类

一、String 类初相识 在 C 语言的世界里&#xff0c;字符串是以\0结尾的字符集合&#xff0c;为了方便操作&#xff0c;C 标准库提供了一系列str系列的库函数&#xff0c;如strcpy、strcat、strlen等。虽然这些库函数在一定程度上满足了我们对字符串的操作需求&#xff0c;但是…

pycharm 中的 Mark Directory As 的作用是什么?

文章目录 Mark Directory As 的作用PYTHONPATH 是什么PYTHONPATH 作用注意事项 Mark Directory As 的作用 可以查看官网&#xff1a;https://www.jetbrains.com/help/pycharm/project-structure-dialog.html#-9p9rve_3 我们这里以 Mark Directory As Sources 为例进行介绍。 这…

MySQL - 字段内分组

1、MySQL 5.7及之前版本 SELECT A.要显示的字段名称,FIRST_VALUE : A.分组字段名称,last :IF(FIRST_VALUE A.分组字段名称, last 1, 1 ) AS rn,FROM 表1 A,(SELECT last : 0, FIRST_VALUE : NULL ) BORDER BY A.排序字段例&#xff1a;SELECT A.DLR_CODE,A.VAILD_CARD_NO,A.L…

瞬态分析中的时域分析与频域分析:原理、对比与应用指南

目录 一、核心概念区分 二、时域分析&#xff1a;时间维度直接求解 1. 基本原理 2. 关键特点 3. 典型算法 4. 应用案例 三、频域分析&#xff1a;频率维度的等效映射 1. 基本原理 2. 关键特点 3. 典型方法 4. 应用案例 四、对比与选择依据 1. 方法论对比 2. 工程…

【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析

一、引言与背景 在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;如DeepSeek以其卓越的自然语言理解和生成能力&#xff0c;推动了众多应用场景的发展。然而&#xff0c;大型模型的高昂计算和存储成本&#xff0c;以及潜在的数据隐私风险&#xff0c;限制了…