执行 shell 脚本 5 种方式对比

执行Shell脚本有多种方式,主要包括相对路径 、绝对路径 、sh命令 、bash命令 、source命令 (或.点命令)。它们在权限要求 、执行环境 、解释器选择 以及对当前Shell的影响等方面有显著区别。下面逐一说明并对比。


1. 相对路径执行

格式:./script.sh 或 scripts/myscript.sh

  • 权限要求 :脚本文件需具有执行权限 (chmod +x script.sh)。
  • 执行环境 :启动一个子Shell (通常是脚本第一行 #! 指定的解释器)来执行。脚本中的变量、目录切换等操作不会影响当前Shell。
  • 解释器 :由脚本第一行的shebang(如#!/bin/bash)决定;若无shebang,则使用当前Shell(但可能因系统而异,通常为默认Shell)。
  • 路径查找 :必须提供准确的相对路径(从当前工作目录出发)。仅写script.sh不会在PATH中查找,除非当前目录在PATH中。

2. 绝对路径执行

格式:/home/user/script.sh 或 /usr/local/bin/myscript

  • 权限要求 :同样需要执行权限。
  • 执行环境 :也是子Shell执行,不影响当前Shell环境。
  • 解释器 :由脚本的shebang决定。
  • 路径查找 :通过完整的路径直接定位,不依赖PATH。

3. sh 命令执行

格式:sh script.sh

  • 权限要求 :只需要读取权限(因为sh会读取文件内容)。
  • 执行环境 :启动一个子Shell (sh进程),脚本中的变更不影响当前Shell。
  • 解释器 :明确使用sh(通常是系统默认的Bourne shell或兼容shell,如dash、bash的sh模式)。脚本中的shebang会被忽略,因为sh本身作为解释器。
  • 路径查找 :若script.sh不带路径,会在PATH中查找;否则按给定路径读取。

4. bash 命令执行

格式:bash script.sh

  • 权限要求 :只需读取权限。
  • 执行环境 :在子Shell(bash进程)中执行,不影响当前Shell。
  • 解释器 :强制使用bash ,忽略脚本中的shebang。适用于依赖bash特性的脚本(如数组、\[ ]等)。
  • 路径查找:同sh,根据路径或PATH查找文件。

5. source 命令(或 . 点命令)执行

格式:source script.sh 或 . script.sh

  • 权限要求 :只需读取权限。
  • 执行环境 :在当前Shell进程 中执行,脚本中所有的变量赋值、函数定义、目录切换等操作会直接影响当前Shell。
  • 解释器 :由当前Shell本身解释执行(当前Shell可能是bash、zsh等),脚本中的shebang被忽略。
  • 路径查找 :如果文件名不带路径,会在PATH中查找;也可指定相对/绝对路径。

对比总结

执行方式 是否需要执行权限 执行环境 解释器来源 影响当前Shell 典型用途
相对/绝对路径 是 子Shell shebang 或 当前默认Shell 否 运行独立脚本
sh script.sh 否(只需读权限) 子Shell (sh) sh(忽略shebang) 否 在sh下测试/兼容运行
bash script.sh 否 子Shell (bash) bash(忽略shebang) 否 强制使用bash运行脚本
source / . 否 当前Shell 当前Shell(忽略shebang) 是 加载配置文件、定义函数、设置环境

注意事项

  • 直接使用路径执行时,若脚本没有shebang,系统会调用默认Shell(通常是/bin/sh)来解释,但不同系统默认Shell可能不同,可能导致行为不一致。
  • source通常用于重用脚本中的函数或变量,例如. ~/.bashrc。
  • 使用sh或bash执行时,可以临时覆盖脚本中指定的解释器,但可能因语法不兼容而出错(如在sh中运行bash特有语法)。
  • 相对路径./script.sh要求当前目录在文件系统中,而script.sh(无路径)若不在PATH中会报错"command not found"。
相关推荐
code2cat2 分钟前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
miss1 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan1 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真1 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment1 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan2 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么2 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技2 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue
西安小哥3 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
陈随易3 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员