Linux中source和bash的区别

在Linux中,sourcebash(或sh)都是用于执行Shell脚本的命令,但它们在执行方式和作用域上有显著区别:

在这里插入图片描述


1. 执行方式

  • bash script.sh(或sh script.sh

    • 启动一个新的子Shell进程来执行脚本。
    • 脚本中的变量、函数、别名等仅在子Shell中生效,父Shell环境不会受到影响
    • 脚本执行完毕后,子Shell退出,所有修改随之消失。
  • source script.sh(或. script.sh

    • 直接在当前Shell环境中执行脚本,不创建子Shell。
    • 脚本中对环境变量、路径、函数等的修改会直接影响当前Shell会话
    • 常用于加载配置文件(如~/.bashrc)或更新当前环境。

2. 作用域对比

场景bash script.shsource script.sh
变量定义仅在子Shell中有效当前Shell中生效
修改PATH等环境变量不影响当前Shell直接影响当前Shell
执行后退出子Shell终止,修改丢失修改持久保留

3. 典型用途

  • bash
    适合运行独立脚本,无需影响当前环境(例如工具脚本、测试任务)。

  • source
    需要修改当前Shell状态时使用,例如:

    source ~/.bashrc  # 重新加载配置
    source venv/bin/activate  # 激活Python虚拟环境
    

4. 其他区别

  • 权限要求
    bash script.sh需要脚本有可执行权限(或通过解释器显式调用),而source不需要。
  • 调试
    bash -x script.sh可以调试脚本,而source的调试需结合set -x

示例验证

假设脚本test.sh内容:

#!/bin/bash
export VAR="hello"
  • 执行bash test.sh后,echo $VAR输出为空(变量未保留)。
  • 执行source test.sh后,echo $VAR输出hello(变量已生效)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值