Linux系统的source命令详解(普通形式执行脚本与source方式执行脚本的区别)


source命令概要介绍

source 命令是 Unix 和 Linux 系统中的一个内建命令,用于在当前 shell 会话中执行指定的脚本或文件。与直接执行脚本文件不同,source 命令不会启动一个新的子 shell,而是将脚本文件中的命令直接在当前 shell 环境中执行。这使得 source 命令特别适用于修改当前 shell 环境变量的场景。

语法:

source

或者,简写为:

.

其中 是你要执行的脚本或文件的路径。

普通形式执行脚本与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.csdn.net/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.csdn.net/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 的路径、目标机器的设置、构建工具的配置等。 /root/imx-yocto-bsp/build-imx-fb:

这是你指定的 Yocto 构建目录(build-imx-fb)。通过传递这个目录路径给 setup-environment 脚本,它会设置与该构建目录相关的环境变量。这包括:

配置构建目录。设定正确的机器(machine)和发行版本(distro)等。初始化本次构建的相关设置,确保后续的构建操作使用的是正确的配置。

联想Ideapad 510S-14-IFI(4GB/500GB/2G独显)网友点评
AIDA64烤机测试一般多久 烤机烤多久可以确定机子正常