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

source命令概要介绍

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

语法:

source <file>

或者,简写为:

. <file>

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

普通形式执行脚本与source方式执行脚本的区别

source(或者 .)命令用于 在当前的 Shell 会话中执行一个脚本,而 不会创建子 Shell。这意味着脚本对环境的更改(如设置环境变量、修改当前目录等)会直接影响到 当前的终端会话

这与普通执行脚本(例如 ./myscript.sh)的行为有一个关键区别——普通执行脚本会在一个新的子 Shell 中运行,脚本对环境的任何更改都不会影响到当前 Shell。具体来说:

  1. 普通脚本执行:如果你运行一个脚本(如 ./myscript.sh),脚本会在一个新的子 Shell 环境中执行。它对当前 Shell 环境的任何更改(例如修改环境变量)都会在脚本执行结束后丢失,因为子 Shell 会话会结束。

  2. 使用 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命令常见作用

  1. 加载环境变量
    通过执行一个脚本来设置或修改当前 shell 环境中的变量。比如,在启动终端时,我们通常需要加载一些环境配置脚本,例如修改 PATH 环境变量、设置代理、启用开发工具等。

    示例:

    source ~/.bashrc
    

    这个命令会重新加载当前用户的 .bashrc 文件,从而使得新的环境变量或配置生效。
    这条命令我在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144326545中已经用过了。

  2. 设置构建环境
    在使用 Yocto 或其他开发工具时,source 命令经常用来加载配置文件,从而设置相关的环境变量。例如,Yocto 中使用 source oe-init-build-env 来设置构建环境,或在 imx-setup-release.sh 中使用 source setup-environment 来加载构建环境配置。

  3. 执行脚本中的命令
    如果你有一个脚本文件(例如,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 配置必要的环境变量。

命令详解:

  1. source 命令

    • source(也可以写作 .)是一个内建命令,主要用于在当前 shell 环境中执行脚本文件中的命令,而不是启动一个新的子 shell。它会使得脚本中的命令(比如设置环境变量、修改路径等)在当前 shell 会话中生效。
  2. /root/imx-yocto-bsp/setup-environment

    • 这是一个用于设置 Yocto 构建环境的脚本文件,位于 /root/imx-yocto-bsp/ 目录下。这个脚本会为 Yocto 构建系统设置一些必要的环境变量、路径等。
    • 当你执行 source /root/imx-yocto-bsp/setup-environment 时,它会确保当前 shell 环境具备 Yocto 构建所需的配置,包括 bitbake 的路径、目标机器的设置、构建工具的配置等。
  3. /root/imx-yocto-bsp/build-imx-fb

    • 这是你指定的 Yocto 构建目录(build-imx-fb)。通过传递这个目录路径给 setup-environment 脚本,它会设置与该构建目录相关的环境变量。这包括:
      • 配置构建目录。
      • 设定正确的机器(machine)和发行版本(distro)等。
      • 初始化本次构建的相关设置,确保后续的构建操作使用的是正确的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值