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

在Unix/Linux中bash/sh/source以及./执行脚本的区别

1. 执行方式

  • sh script.sh 或 bash script.sh:
    • 运行脚本时,创建一个新的子shell。
    • 脚本中的命令在这个子shell中执行,任何在脚本中设置的环境变量或工作目录(如 cd)等变化将不会影响到父shell。
    • 当脚本执行完毕,子shell会退出,返回到父shell。
  • source ./script.sh 或 . ./script.sh:(source 命令其别名 .)
    • 不会创建新的子shell,而是直接在当前shell环境中执行脚本。
    • 脚本中的所有命令和变量设置都会影响到当前的shell环境,这意味着如果脚本中更改了环境变量,它们在当前shell中仍然有效。
    • 脚本执行完后,控制仍然在当前shell中。
  • ./script.sh:
    • 直接执行脚本文件script.sh
    • 使用./script.sh方式执行脚本时,会在一个新的子Shell中运行脚本,但是此时脚本需要有执行权限,可以使用chmod +x script.sh添加执行权限
    • 运行此命令时,系统会根据 shebang(#!)行来确定使用哪个解释器执行该脚本。例如,如果脚本的第一行是 #!/bin/bash,那么它会使用 Bash 来执行脚本。
    • 可以直接执行任意可执行文件,例如demo.py或可执行二进制文件

2. 适用场景

  • 使用 sh script.sh 或 bash script.sh 时:
    • 适用于想要独立运行脚本且不需要与当前shell共享环境的情况。
    • 运行的结果仅对脚本内部有效。
  • 使用 . ./script.sh 或 source ./script.sh 时:
    • 适用于需要在当前环境中共享变量或改变当前shell状态的情况。
    • 很常用在设置环境变量、配置shell提示符或其他需要在当前shell生效的设置。
  • ./script.sh:
    • 根据脚本中的 shebang 行,可以选择不同的解释器执行文件 (如Bash、python2、python3 等)。
    • 对于支持不同 shell 特性的脚本,使用 ./script.sh 更为灵活,也更能确保代码按照预期进行执行。
    • 提升可读性和直接性
    • 处理特定环境或上下文下的错误

3. 错误处理与返回值

  • 子shell执行 (sh script.sh) :
    • 如果脚本有错误,子shell会返回错误码,但父shell的环境状态不会改变。
  • 当前shell执行 (. ./script.sh) :
    • 错误会直接影响当前shell的状态,可以通过捕获错误来处理,比如使用条件语句。

4. 总结

  • 使用 sh script.shbash script.sh./script.sh 适合于独立执行、限制对当前环境的影响。
  • 使用 . ./script.shsource ./script.sh 适合于需要在当前shell环境中载入设置、变量,或者希望脚本更改当前环境状态的场景。

http://www.dtcms.com/a/406058.html

相关文章:

  • 宜春公司做网站双语网站建设定制开发
  • Spring Boot 应用启动组件加载顺序与优先级详解
  • Spring Boot 事件发布与监听 观察者模式的实际应用
  • Sui Stack Messaging SDK:为 Web3 打造可编程通信
  • 光谱相机的未来趋势
  • 【Java后端】《Spring Boot Starter 原理详解》博客
  • 设计与绘制一个网站首页同学录wordpress
  • Vue2的生命周期
  • MySQL学习笔记04:MySQL InnoDB存储引擎核心机制深度解析
  • 中国企业网站建设响应式网站管理
  • 遇到不会的事,先写一写
  • 心理咨询 网站模版嘉兴网站建设技术开发
  • 【面试】Kafka / RabbitMQ / ActiveMQ
  • 新网站建设的工作总结文化网站建设需要的功能
  • 11.WPF 的命令处理事件--参数介绍
  • 旅游管理虚拟仿真实训室:打通理论与实践壁垒
  • FreeLong-无需训练即可延长视频生成时长
  • Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
  • 关于机器视觉中的”果冻效应“讲解:全局曝光 vs 卷帘曝光
  • 如何做百度的网站网站开发技术的雏形 cgi
  • 织梦医院网站源码6731官方网站下载
  • Transformer模型/注意力机制/目标检测/语义分割/图神经网络/强化学习/生成式模型/自监督学习/物理信息神经网络等
  • 公司网站 域名seo快速提高网站转化率
  • Planner Agent 和 PlanReAct 的区别
  • Google Play合规指南:您的应用所使用的原生库不支持 16 KB 内存页面大小.快速解决
  • 什么是覆盖索引?PostgreSQL 是否支持覆盖索引?
  • 谨慎地迭代函数所收到的参数 (Effective Python 第31条)
  • ESP32 NTC热敏电阻测温全攻略:从ADC采样到线性插值算法详解
  • 介绍 τ-bench:一个评估语言智能体在真实场景中与人、工具、规则交互能力的新基准
  • 网站模版建设教程效果好网站建设哪家好