当前位置: 首页 > news >正文

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(变量已生效)。

相关文章:

  • 深度学习环境搭建(pycharm+yolov5)
  • STM32外设学习之串口
  • asio之socket_ops
  • 【线程与线程池】线程数设置(四)
  • 在 Flask 或 Tornado 中返回渲染后的页面内容
  • io_uring的异步IO机制
  • 【React】SWR 和 React Query(TanStack Query)
  • TCP/IP 网络编程 | Reactor事件处理模式
  • docker 网络
  • Ubuntu apt-get安装-报错:尝试“apt --fix-broken install”有未能满足的依赖关系,几种解决办法
  • 中间件是微服务架构的支撑工具,微服务是中间件的应用场景之一。
  • AI大模型竞赛升温:百度发布文心大模型4.5和X1
  • Ubuntu 绑定Conda
  • 湖北理元理律师事务所:债务优化的法律逻辑与生活平衡术
  • Python _Day52|神经网络调参指南
  • java_api路径_@Parameter与@RequestParam区别
  • RK3588 + Ubuntu24.04 部署 rknn 模型——不用[特殊字符]版全流程教程
  • R语言缓释制剂QBD解决方案之五
  • 机器学习 [白板推导](六)[核方法、指数族分布]
  • Local All-Pair Correspondence for Point Tracking
  • 淘宝客做网站推广赚钱吗/网店代运营哪个好
  • 2008 .net 网站 目录 权限管理/怎么把网站排名优化
  • 商丘行业网站建设开发公司/网络渠道有哪些
  • 河北建设集团在哪个网站采购/电商运营怎么做如何从零开始
  • 合肥公司制作网站的/网络营销工程师是做什么的
  • 好sf123网站123/私域运营软件