title: Linux Source命令 author: Gamehu tags: - 实践 categories: - 工作 date: 2019-05-15 20:08:00 --- 项目前期运维工具没有铺开的时候很多时候都是直接上服务器敲命令,这里记录一下source命令,也是某段时间很常用的一个命令。 我用source命令主要是为了刷新环境变量。刚好前段时间看到一篇文章 https://linuxhandbook.com/source-command/,对source命令有了更深入的了解,在这搬运一下。 ### Linux中的源命令是什么? source命令的是从当前shell中的文件执行。它也可以用于刷新环境变量,通常source命令的主要用途是刷新环境变量。 ``` source filename [options] ``` 您也可以使用.(点)代替这样的源命令: ``` . filename [options] ``` ### 源命令如何工作? {% asset_img source.png https://linuxhandbook.com/source-command/ %} 该命令的语法很简单,但是要理解它,需要更深入地了解一些Linux概念。 在继续之前,我先对变量给出一个简短的解释。 #### 变量概述 您可以打开任何bash终端并创建新变量。变量可以被视为占位符,可用于将系统指向一条信息(字母,数字或符号)。 让我们来看一个例子。我将创建一个名为name的新变量,并将为值Christopher赋值。 在bash中,这是使用公式完成的:**variable_name = your_variable**。请勿在**=**符号和您的文本之间添加任何空格。 ``` christopher@linuxhandbook:~$ name=Christopher christopher@linuxhandbook:~$ echo $name Christopher ``` 如果我只输入变量名会怎样? ``` christopher@linuxhandbook:~$ echo name name ``` 如果您忘记了该符号,bash将返回您输入的文本。在这里,我告诉它回显或打印“名称”。没有$符号,bash无法识别您要使用已创建的变量。 您的变量将被插入到调用它的位置。因此,我也可以将其包含在这样的句子中: ``` christopher@linuxhandbook:~$ echo "Hello, $name. $name is a great name. It's good to meet you." Hello, Christopher. Christopher is a great name. It's good to meet you. ``` 您可以使用变量做很多事情,但是我希望该入门足以使任何阅读本文的人都能理解它们的工作原理。 #### 环境变量与shell(本地)变量 对于理解源命令的下一个关键,让我们谈谈持久性。这是考虑shell变量和环境变量之间差异的简便方法。您可能还根据上下文根据“可移植性”来考虑它。 简而言之,如果在终端shell中创建变量,则退出该shell后该变量将丢失。 相反,[环境变量](https://help.ubuntu.com/community/EnvironmentVariables)在您的操作系统中具有持久性。这些变量通常使用所有大写字母来区分自己。 例如,您的用户名被操作系统称为$ USER。 ``` christopher@linuxhandbook:~$ echo $USER christopher ``` 好的,因此您花了很多时间来研究环境变量和shell变量之间的差异。这与source有什么关系?如果不了解这块则,运行**source**和**bash**不会有任何区别。 #### Source vs Bash 如果您使用Linux已有一段时间,那么您可能会遇到这些命令,并认为它们做了相同的事情。毕竟,这两个命令都可以用来执行脚本。 **source**在当前shell中工作,与运行bash会创建一个新shell不同。这并不明显,因为没有显示新窗口。 比如编写一个非常简单的脚本(将其称为echo.sh),如下所示: ``` #! bin/bash echo $USER echo $name ``` 在终端中执行其他任何操作之前,请将值分配给变量名称。 ``` christopher@linuxhandbook:~$ name=chris ``` 接下来,我将向您展示在分配变量的同一终端中尝试所有3条命令时会发生什么。 ``` christopher@linuxhandbook:~$ bash echo.sh christopher christopher@linuxhandbook:~$ source echo.sh christopher chris christopher@linuxhandbook:~$ . echo.sh christopher chris ``` 如您所见,通过**bash**执行脚本时,无法识别本地变量。 ### 使用source命令刷新环境变量 Source也可以用于更新当前Shell中的环境变量。此任务的常见应用程序是在当前shell中更新bash配置文件。 用户可能想要修改其bash配置文件以[创建别名](https://linuxhandbook.com/linux-alias-command/)。通常,一旦保存了配置,您将需要打开一个新的终端窗口以进行更改。 ``` christopher@linuxhandbook:~$ source .bashrc ``` 运行此命令将刷新当前外壳程序中的设置,而不会强制您打开新终端。