Linux Shell脚本执行方式全解析:source、点号、路径、bash与exec的区别

引言

在Linux开发中,执行Shell脚本的方式多样,但不同方式对进程和环境的影响常被混淆。你是否遇到过变量不生效、终端意外退出或环境切换失败?本文将全面解析source.、直接路径、bashexec五种方式,通过实例演示其核心差异。


1. 核心概念:子shell与进程替换

  • 当前shell:用户正在操作的终端进程。
  • 子shell:由当前shell派生的子进程,独立于父进程。
  • 进程替换:用新进程完全替换当前进程(原进程被销毁)。

2. 五种执行方式详解

2.1 source 与 . (点号)

命令source script.sh. script.sh
机制 :在当前shell直接执行,不创建子shell
影响 :变量、函数、目录变更持久化 到当前shell;exit会退出当前shell。
适用 :加载配置文件(如.bashrc)、设置环境变量。

2.2 直接路径执行

命令./script.sh
前提 :脚本需可执行权限(chmod +x)。
机制 :在子shell 中执行。
影响 :变量、目录变更不持久化exit仅退出子shell。
适用:独立任务脚本。

2.3 显式解释器(bash)

命令bash script.sh
机制 :在子shell 中执行(无需可执行权限)。
影响 :同直接路径执行。
适用:测试脚本、指定解释器版本。

2.4 exec 执行

命令exec script.sh
机制 :用脚本进程替换当前shell进程 (不创建子shell)。
影响 :脚本结束后当前shell退出 ;变量、目录变更不持久化 (因原进程被销毁)。
适用:登录shell切换、容器入口点、完全切换环境。


3. 完整对比表

执行方式 子shell 进程替换 变量持久化 cd影响当前目录 exit影响当前shell
source 或 . ❌ 否 ❌ 否 ✅ 是 ✅ 是 ✅ 是
./script.sh ✅ 是 ❌ 否 ❌ 否 ❌ 否 ❌ 否
bash script.sh ✅ 是 ❌ 否 ❌ 否 ❌ 否 ❌ 否
exec script.sh ❌ 否 ✅ 是 ❌ 否 ❌ 否 ✅ 是(退出)

4. 实战场景

  1. 环境配置
    使用source ~/.bashrc使配置立即生效。
  2. 独立任务
    使用./task.sh避免污染当前环境。
  3. 容器启动
    使用exec作为容器入口点(如Docker的CMD ["exec", "app.sh"]),确保进程信号正确传递。

5. 总结

  • 需要持久化环境 :选择source.
  • 运行独立任务 :选择直接路径或bash
  • 完全切换环境 :选择exec(注意会退出当前shell)。

正确选择执行方式,可提升脚本的可靠性与安全性。

相关推荐
groundhappy14 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-15 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
通信小小昕15 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
壮哥_icon15 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi16 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_1800790524716 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
张小姐的猫16 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
小稻穗16 小时前
市场调研样本选型坐标系:2026六家国内样本平台能力横向校验
大数据·运维·数据分析
栩栩云生16 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
AOwhisky17 小时前
Python 学习笔记(第十三期)——运维自动化(下·前篇):远程命令执行——paramiko基础篇
运维·python·学习·云原生·自动化·运维开发·paramiko