source命令概要介绍
source
命令是 Unix 和 Linux 系统中的一个内建命令,用于在当前 shell 会话中执行指定的脚本或文件。与直接执行脚本文件不同,source
命令不会启动一个新的子 shell,而是将脚本文件中的命令直接在当前 shell 环境中执行。这使得 source
命令特别适用于修改当前 shell 环境变量的场景。
语法:
source <file>
或者,简写为:
. <file>
其中 <file>
是你要执行的脚本或文件的路径。
普通形式执行脚本与source方式执行脚本的区别
source
(或者 .
)命令用于 在当前的 Shell 会话中执行一个脚本,而 不会创建子 Shell。这意味着脚本对环境的更改(如设置环境变量、修改当前目录等)会直接影响到 当前的终端会话。
这与普通执行脚本(例如 ./myscript.sh
)的行为有一个关键区别——普通执行脚本会在一个新的子 Shell 中运行,脚本对环境的任何更改都不会影响到当前 Shell。具体来说:
-
普通脚本执行:如果你运行一个脚本(如
./myscript.sh
),脚本会在一个新的子 Shell 环境中执行。它对当前 Shell 环境的任何更改(例如修改环境变量)都会在脚本执行结束后丢失,因为子 Shell 会话会结束。 -
使用
source
命令执行脚本:如果你用source myscript.sh
来执行脚本,脚本中的任何环境变量设置、路径更改等都会 直接修改当前 Shell 的环境,并且这些更改会在脚本执行后继续保留在当前的 Shell 会话中。
举例说明:
假设你有一个脚本 set_env.sh
,内容如下:
# set_env.sh
export MY_VAR="Hello, world!"
cd /home/user
如果直接执行脚本:
./set_env.sh
- 脚本会在 子 Shell 中执行。
- 脚本中对环境变量
MY_VAR
和当前目录的更改只会作用在 子 Shell 中,脚本执行完后,你的当前 Shell 会话中的环境变量和目录都不会受到影响。
如果使用 source
执行脚本:
source set_env.sh
- 脚本会在 当前 Shell 中执行。
- 脚本中的环境变量
MY_VAR
会被设置到当前 Shell 中,当前 Shell 的目录会改变为/home/user
,并且这些更改会一直保留在当前终端会话中,直到你关闭终端或者手动修改它们。
source命令常见作用
-
加载环境变量:
通过执行一个脚本来设置或修改当前 shell 环境中的变量。比如,在启动终端时,我们通常需要加载一些环境配置脚本,例如修改 PATH 环境变量、设置代理、启用开发工具等。示例:
source ~/.bashrc
这个命令会重新加载当前用户的
.bashrc
文件,从而使得新的环境变量或配置生效。
这条命令我在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545中已经用过了。 -
设置构建环境:
在使用 Yocto 或其他开发工具时,source
命令经常用来加载配置文件,从而设置相关的环境变量。例如,Yocto 中使用source oe-init-build-env
来设置构建环境,或在imx-setup-release.sh
中使用source setup-environment
来加载构建环境配置。 -
执行脚本中的命令:
如果你有一个脚本文件(例如,setup-environment
)来配置你的开发环境,使用source
命令可以确保脚本中的命令在当前 shell 中执行,而不是启动一个新的 shell。这样,脚本对环境的修改(如设置环境变量)会立即在当前 shell 会话中生效。示例:
source /root/imx-yocto-bsp/setup-environment /root/imx-yocto-bsp/build-imx-fb
这条命令的详细解释见本博文后面。
作用总结:
source
命令非常有用,特别是当你需要在当前 shell 环境中执行一些脚本,修改环境变量,或者激活某些设置时。它允许你在不启动新 shell 的情况下执行脚本,因此,脚本中的修改会立即对当前会话生效。
实例详解
这个实例来源于博文:https://blog.youkuaiyun.com/wenhao_ir/article/details/145547974
source /root/imx-yocto-bsp/setup-environment /root/imx-yocto-bsp/build-imx-fb
使用 source
命令来加载一个环境设置脚本 setup-environment
,并为构建目录 build-imx-fb
配置必要的环境变量。
命令详解:
-
source
命令:source
(也可以写作.
)是一个内建命令,主要用于在当前 shell 环境中执行脚本文件中的命令,而不是启动一个新的子 shell。它会使得脚本中的命令(比如设置环境变量、修改路径等)在当前 shell 会话中生效。
-
/root/imx-yocto-bsp/setup-environment
:- 这是一个用于设置 Yocto 构建环境的脚本文件,位于
/root/imx-yocto-bsp/
目录下。这个脚本会为 Yocto 构建系统设置一些必要的环境变量、路径等。 - 当你执行
source /root/imx-yocto-bsp/setup-environment
时,它会确保当前 shell 环境具备 Yocto 构建所需的配置,包括bitbake
的路径、目标机器的设置、构建工具的配置等。
- 这是一个用于设置 Yocto 构建环境的脚本文件,位于
-
/root/imx-yocto-bsp/build-imx-fb
:- 这是你指定的 Yocto 构建目录(
build-imx-fb
)。通过传递这个目录路径给setup-environment
脚本,它会设置与该构建目录相关的环境变量。这包括:- 配置构建目录。
- 设定正确的机器(machine)和发行版本(distro)等。
- 初始化本次构建的相关设置,确保后续的构建操作使用的是正确的配置。
- 这是你指定的 Yocto 构建目录(