Bash Source 命令

source 命令从当前 shell 环境中指定为其参数的文件中读取和执行命令。将函数,变量和配置文件加载到 shell 脚本中非常有用。

source 命令已经内置在 Bash shell 中和 Linux 和 UNIX 操作系统中使用的其他流行的 shell 中。

Source 命令语法

source 命令的语法如下:

source FILENAME [ARGUMENTS]
. FILENAME [ARGUMENTS]
  • source.(一个点)是同一个命令。
  • 如果该 FILENAME 文件不是文件的完整路径,则该命令将在 $PATH  环境变量中指定的目录中搜索该文件。如果在该 $PATH 命令中找不到该文件,则将在当前目录中查找该文件。
  • 如果给出了任意的 ARGUMENTS,它们将成为 FILENAME 的位置参数。
  • 如果 FILENAME 存在 source 命令返回代码 0 ,否则如果找不到该文件则返回 1

Source 命令示例

在本节中,我们将介绍 source 命令的一些基本示例。

采购职能

如果你有使用相同功能的 shell 脚本,你可以在一个单独的文件中提取它们,然后在你的程序中找到该文件。

在此示例中,我们将创建一个包含 bash 函数的文件,该函数检查运行脚本的用户是否为 root ,如果不是,则显示消息并退出脚本。

functions.sh

check_root () {
  if [[ $EUID -ne 0 ]]; then
    echo "This script must be run as root" 
    exit 1
  fi
}

如果你的其他脚本需要仅仅由 root 用户运行,只需 source 一下 functions.sh 文件并调用该函数:

#!/usr/bin/env bash

source functions.sh
check_root

echo "I am root"

如果以非 root 用户身份运行上述脚本,脚本将打印 “This script must be run as root” 并退出。

这种方法的优点是您的脚本更小,更易读,您可以在需要时重用相同的函数文件,如果您需要修改函数,您只需编辑一个文件。

Bash 配置文件

使用 source 命令,您还可以从文件中读取变量。必须使用 Bash 语法设置变量 VARIABLE=VALUE

让我们创建一个测试配置文件:

config.sh

VAR1="foo"
VAR2="bar"

在 bash 脚本中使用该 source 命令读取配置文件:

#!/usr/bin/env bash

source config.sh

echo "VAR1 is $VAR1"
echo "VAR2 is $VAR2"

如果您运行脚本,输出将如下所示:

VAR1 is foo
VAR2 is bar

结论

在本指南中,您学习了如何 source 在 shell 脚本中使用 builtin 命令。