首页 > 其他分享 >source 和export 命令的区别

source 和export 命令的区别

时间:2024-04-10 09:45:01浏览次数:23  
标签:脚本 shell 变量 区别 source sh export Shell

1、source

source 的解释,内置的shell命令,其功能是什么?什么是shell?

source 指令的作用:

1、刷新当前shell环境
2、在当前环境使用source执行Shell脚本
3、从脚本中导入一个shell功能函数
4、从另一个Shell脚本中读取变量


一、概述


source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行execute命令。

 

source命令的用法:

source FILENAME [ARGUMENTS]
source可替换为.

二、用途

1、刷新当前shell环境

source ~/.bash_profile

家目录下的.bash_profile 是一个隐藏文件,主要是用来配置bash shell的。source ~/.bash_profile 则可让这个配置文件在修改后立即生效。


2、在当前环境使用source执行Shell脚本

Shell脚本不知道你在当前Shell环境中定义的变量。source命令可解决这个问题。

# 定义一个变量
[root@localhost ~] url=www.baidu.com

# 写测试脚本source.sh
[root@localhost ~] vi source.sh
[root@localhost ~] cat source.sh
#!/bin/sh
echo $url

#此时用sh执行脚本
[root@localhost ~] sh source.sh
输出为空

#用source执行脚本时,找不到环境中定义的变量
[root@localhost ~] source source.sh
www.baidu.com

#用.执行脚本
[root@localhost ~] . source.sh
www.baidu.com

#注意 . 和./source.sh方式的区别
[root@localhost ~] ./ source.sh
-bash: ./source.sh:Permission denied
加可执行权限
[root@localhost ~] chmod +x source.sh
[root@localhost ~] ./ source.sh
输出为空

以上实例,除了重点source外,sh和./的区别与联系,source和.的等价也需注意。


3、从脚本中导入一个shell功能函数

#写脚本定义函数tool
[root@localhost ~] vi func.sh
#!/bin/bash
tool(){
echo "function test!"
}

#在当前shell中导入脚本func.sh中定义的功能
[root@localhost ~] source func.sh
[root@localhost ~] tool
function test!

 

4、从另一个Shell脚本中读取变量

#创建一个带有变量的脚本var.sh
[root@localhost ~] vi var.sh
#!/bin/bash
a=1
b=2
c=3

#创建脚本read.sh,脚本内读取var.sh的变量
[root@localhost ~] vi read.sh
#!/bin/bash
source ~/var.sh
echo $a
echo $b
echo $c

#执行read.sh查看是否成功获取
[root@localhost ~] sh read.sh


最后,关于exec和source:
source命令在当前shell中执行脚本,而exec命令在新的shell中运行。


原文链接:https://blog.csdn.net/llg___/article/details/126250474

 

2 什么是Linux Shell

Shell是一种命令行解释器,它允许用户与操作系统进行交互。在Shell中,有许多内置命令可用于执行各种任务,包括文件操作、进程管理、环境变量设置等。在本文中,我们将详细介绍一些常见的Shell内置命令及其示例用法。

一个命令解释器 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。 Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。

简介

Linux提供了像MicrosoftWindows那样的可视的命令输入界面--X Window图形用户界面GUI)。它提供了很多桌面环境系统,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。GNOME。 每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。 同Linux本身一样,Shell也有多种不同的版本。主要有下列版本的Shell: Bourne Shell:是贝尔实验室开发的。 BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。 Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。 C Shell:是SUN公司Shell的BSD版本。 Z Shell:The last shell you’ll ever need! Z是最后一个字母,也就是终极Shell。它集成了bash、ksh的重要特性,同时又增加了自己独有的特性。  

3 export 

Linux export命令 功能说明:设置或显示环境变量 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登录操作。 参 数: -f 代表[变量名称]中为函数名称。 -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p 列出所有的shell赋予程序的环境变量。 中文名export 功能说明设置或显示环境变量 语 法变量名称]=[变量设置值] 参 数-f 代表[变量名称]中为函数名称 参数介绍 -f  代表[变量名称]中为函数名称。 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p  列出所有的shell赋予程序的环境变量。 一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原来脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。 登录到系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由某个shell(称为父shell)派生的。 在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。 #echo $PKG_PATH 在任何时候建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用。 export ,是把你设置的环境变量传给当前SHELL的子SHELL,使其在子SHELL中有效。  

4 source 环境和export 二者区别

source 命令和 export 命令在设置环境变量方面有一些不同:

  1. source 命令:

    • source 命令用于在当前 shell 环境中执行指定的脚本文件,并确保其中的变量、函数等在当前 shell 中可用。
    • 主要用途是在当前 shell 中加载和执行 shell 脚本文件,而不是启动一个新的子 shell 来执行脚本。
  2. export 命令:

    • export 命令用于将变量设置为环境变量,使其在当前 shell 中可用,并且在当前 shell 中启动的任何子进程中也可用。
    • 主要用途是将变量导出为环境变量,以便它在当前 shell 和任何由当前 shell 启动的子进程中都可见。

区别总结:

  • source 主要用于加载和执行脚本文件,在当前 shell 中设置变量和执行脚本。
  • export 主要用于将变量设置为环境变量,以便在当前 shell 和其子进程中都可见。

在设置环境变量时,通常会结合使用这两个命令。例如,在脚本文件中定义变量并使用 export 将其设置为环境变量,然后使用 source 命令来加载该脚本文件以确保变量在当前 shell 中可用。

   

 

标签:脚本,shell,变量,区别,source,sh,export,Shell
From: https://www.cnblogs.com/blj28/p/18125349

相关文章

  • 请求转发和请求重定向的区别
    请求转发(Forward)和请求重定向(Redirect)虽然都是HTTP服务器,处理客户端请求时进行(页面)跳转的实现方式,但是二者有以下5点不同:1.定义不同。2.跳转方不同。3.数据共享不同。4.最终URL地址不同。5.代码实现不同。具体内容如下:①定义不同请求转发(Forward):发......
  • docker踩坑之 device or resource busy
    问题描述linux服务器上运行了一个docker容器,在运行cp命令时报错dockercpredis.confmyadmin_redis:/data/redis.conf将服务器上的文件拷贝到docker容器内部时,报以下错误Errorresponsefromdaemon:Errorprocessingtarfile(exitstatus1):unlinkat/data/redi......
  • 跨域请求资源-jsonp和cors区别
    JSONP和CORS的区别JSONP的原理:动态创建script标签;JSONP发送的不是Ajax请求不支持Post请求;CORS中文意思是跨域资源共享,需要服务器端进行CORS配置;CORS发送的是真正的Ajax请求CORS支持Ajax的跨域如果要启用CORS跨域资源共享,关键......
  • java中add()和put()方法区别?
    在Java中,add()和put()方法常用于不同的数据结构中,并各自具有特定的用途和语义。下面我们来详细讨论一下这两种方法的主要区别:List接口中的add()方法:add()方法在Java的List接口(以及它的实现类,如ArrayList和LinkedList)中非常常见。这个方法用于向列表的末尾添加一个元素。例如:j......
  • 面试常问问题——web端测试、安卓测试、ios测试的区别是什么?
    web端需要考虑:1、浏览器种类的兼容2、浏览器版本的兼容3、电脑和显示器的显示4、缩放窗口大小的显示5、响应时间 app测试需要考虑:1、不同的屏幕分辨率2、不同品牌的设备3、不同的系统4、不同的安卓版本5、安装卸载......
  • .NET CORE中Applicationbuilder的Use和Run方法有什么区别
    .NETCORE中Applicationbuilder的Use和Run方法有什么区别?Applicationbuilder:用于构件应用程序的中间件管道。Use额Run是用来配置中间件和构建管道。Use方法:用于添加中间件到管道中,并指定中间件的处理逻辑,可以多次调用,按照调用顺序一次添加多个中间件。Use方法通常用于添加通用......
  • Web测试和APP测试的侧重点和区别
    1、Web测试的重点是UI、功能、性能、兼容、安全、资源链接2、APP测试的重点是安装卸载、资源占用、软件升级和用户数据保存、按钮功能、机器按键、注册登录和展示内容限制,打开和退出3、二者区别兼容性不同:Web考虑不同浏览器和分辨率;APP考虑不同机型和和版本......
  • mysql 同步 && 半同步 && 异步的区别
    目录mysql同步&&半同步&&异步的区别概述同步复制同步复制的流程设置为同步复制模式半同步复制半同步复制的流程设置为半同步复制模式异步复制异步复制的流程实现异步复制总结mysql同步&&半同步&&异步的区别概述在MySQL数据库中,同步、半同步和异步是用来控制数据复制......
  • JSX.Element 和 React.ElementType的区别是什么?
    在React和TypeScript中,JSX.Element和React.ElementType代表了两种不同的概念:JSX.Element:JSX.Element是一个类型,表示由JSX编译后生成的实际React元素对象。当你在React应用中使用JSX编写组件时,每一个JSX表达式都会编译为一个JSX.Element对象。例如:constMyComponent:React.......
  • 面试必问!鸿蒙开发中的FA模型和Stage模型是什么?他们分别有什么区别?
    鸿蒙OS(HarmonyOS)是面向全场景的分布式操作系统,它通过创新的应用模型,为开发者提供了强大的应用开发框架。在HarmonyOS的发展过程中,FA模型(FeatureAbility)和Stage模型是两种重要的应用模型。今天来跟大家聊一聊,鸿蒙开发中的FA模型和Stage模型。这个问题是鸿蒙应用开发面试......