Shell、Bash 执行方式及./ 执行对比详解

Shell、Bash 执行方式及./ 执行对比详解

在 Linux 和 UNIX 系统的使用过程中,Shell 脚本是实现自动化任务、系统管理的重要工具。而在执行 Shell 脚本时,我们常常会用到bash命令以及./的执行方式,这两种执行方式看似相似,实则存在诸多差异。本文将深入探讨 Shell、Bash 的概念,并详细对比bash和./执行 Shell 脚本的不同之处,帮助你在实际操作中选择更合适的执行方式。

一、Shell 与 Bash 基础概念

1.1 Shell 概述

Shell 是用户与 Linux 内核之间的桥梁,它提供了一个命令行界面,用户通过输入命令,Shell 对命令进行解释并传递给内核执行,然后将执行结果返回给用户。Shell 不仅可以执行系统命令,还支持编写脚本程序,将一系列命令组合起来,实现自动化任务。常见的 Shell 有 Bash、Zsh、Ksh 等,不同的 Shell 在语法和功能上存在一定差异,但基本原理相同。

1.2 Bash 简介

Bash(Bourne - Again SHell)是 GNU 计划中重要的组成部分,也是大多数 Linux 发行版默认的 Shell。它兼容 Bourne Shell(sh)的语法,并在其基础上进行了大量扩展和增强,例如支持命令补全、历史命令记录、别名设置等功能。Bash 提供了丰富的编程结构,如条件语句、循环语句等,方便用户编写复杂的 Shell 脚本。由于其广泛的应用和强大的功能,Bash 成为了 Shell 脚本编写和执行的主流选择。

二、使用 bash 执行 Shell 脚本

2.1 执行方式

使用bash命令执行 Shell 脚本非常简单,只需在命令行中输入bash,然后跟上脚本的文件名即可。例如,有一个名为test.sh的 Shell 脚本,执行命令如下:

bash test.sh

2.2 执行原理

当使用bash命令执行脚本时,系统会启动一个新的 Bash 进程,将脚本内容作为输入传递给这个新进程进行解释执行。在这个过程中,脚本中的命令是在新的子 Shell 环境中运行的,与当前的 Shell 环境相互隔离。这意味着脚本中对环境变量的修改,不会影响到当前 Shell 环境中的变量值;反之,当前 Shell 环境中的变量变化也不会影响脚本执行过程中的变量状态。

2.3 适用场景

  1. 脚本调试:在脚本开发过程中,使用bash执行脚本便于调试。由于脚本在子 Shell 环境中运行,即使脚本出现错误,也不会对当前 Shell 环境造成严重影响。同时,bash提供了一些调试选项,如-x,可以在执行脚本时显示每一条命令及其参数,帮助开发者快速定位问题。例如:
bash -x test.sh
  1. 临时执行脚本:当需要临时执行一个 Shell 脚本,且不希望脚本对当前 Shell 环境产生影响时,使用bash执行是一个不错的选择。比如,运行一些一次性的系统清理脚本,在子 Shell 环境中执行可以避免意外修改当前 Shell 的重要配置。

三、使用./ 执行 Shell 脚本

3.1 执行方式

使用./执行 Shell 脚本,首先需要确保脚本具有可执行权限。可以通过chmod命令赋予脚本可执行权限,例如:

chmod +x test.sh

然后在命令行中输入./test.sh来执行脚本。

3.2 执行原理

使用./执行 Shell 脚本时,系统会根据脚本第一行的Shebang(#!/bin/sh 或 #!/bin/bash 等)指定的 Shell 程序来执行脚本。如果脚本第一行是#!/bin/bash,则系统会启动 Bash 程序,并将脚本内容传递给它进行解释执行。与bash命令执行不同的是,使用./执行脚本是在当前 Shell 环境中进行的(除非脚本中显式地创建了新的子 Shell),这意味着脚本中对环境变量的修改会直接影响到当前 Shell 环境。

3.3 适用场景

  1. 正式运行脚本:当脚本开发完成,确认无误后,使用./执行脚本是常见的方式。因为在这种方式下,脚本与当前 Shell 环境紧密关联,能够充分利用当前环境的配置和变量,实现更符合预期的功能。例如,一些长期运行的服务脚本,通过./执行可以确保其与系统环境的一致性。
  1. 脚本依赖当前环境:如果脚本需要依赖当前 Shell 环境中的特定配置或变量,使用./执行是必要的。比如,脚本中引用了当前 Shell 环境中设置的路径变量来查找相关文件,只有在当前 Shell 环境中执行才能正确获取这些变量值,保证脚本正常运行。

四、bash 与./ 执行方式的对比

4.1 环境影响

  • bash:在子 Shell 环境中执行,对当前 Shell 环境无影响,脚本中的变量修改不会传递到外部。
  • ./:在当前 Shell 环境中执行,脚本对环境变量的修改会影响当前 Shell,可能会改变后续命令的执行结果。

4.2 执行权限要求

  • bash:无需脚本具有可执行权限,只要能访问到脚本文件,即可使用bash命令执行。
  • ./:必须赋予脚本可执行权限(chmod +x),否则系统会提示权限不足,无法执行脚本。

4.3 执行效率

一般情况下,两者的执行效率差异不大。但在一些特殊场景下,由于bash命令执行时会启动新的进程,可能会带来一定的额外开销;而./执行在当前 Shell 环境中,相对减少了进程创建的开销,在某些情况下可能会稍快一些。不过这种差异在大多数常规脚本执行中并不明显。

4.4 错误处理与调试

  • bash:提供了丰富的调试选项,如-x,方便开发者进行脚本调试,且由于在子 Shell 环境执行,即使脚本出错也不会轻易破坏当前 Shell 环境,安全性较高。
  • ./:在当前 Shell 环境执行,如果脚本出现严重错误,可能会影响当前 Shell 的正常运行,导致后续命令无法执行,增加了调试和恢复的难度。

五、总结

Shell、Bash 以及bash和./执行方式在 Linux 系统的脚本执行中都扮演着重要角色。bash命令执行脚本适合脚本调试和临时执行,能够有效隔离脚本对当前环境的影响;而./执行方式则更适用于脚本的正式运行,以及需要依赖当前 Shell 环境的场景。在实际使用过程中,我们应根据具体需求和场景,合理选择执行方式,以确保 Shell 脚本能够安全、高效地运行。通过深入理解它们之间的差异,有助于我们更好地掌握 Linux 系统的脚本执行机制,提升系统管理和自动化任务的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1494 [国家集训队] 小 Z 的袜子 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 q q q 次查询&#xff0c;每次查询给定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r − l ) ( r − l 1 ) \dfrac{2\sum…

解决vue3 路由query传参刷新后数据丢失的问题

前言&#xff1a;在页面刷新的时候&#xff0c;路由query数据会被清空&#xff0c;网上很多方法说query传参可以实现&#xff0c;反正我是没有实现 思路&#xff1a;将数据保存到本地&#xff0c;通过 “ &#xff1f;” 进行判断是否有数据&#xff0c;页面销毁的时候删除本地…

IIC小记

SCL 时钟同步线&#xff0c;由主机发出。 当SCL为高电平&#xff08;逻辑1&#xff09;时是工作状态&#xff0c;低电平&#xff08;逻辑0&#xff09;时是休息状态。SCL可以控制通信的速度。 SDA 数据收发线 应答位&#xff1a;前八个工作区间是一个字节&#xff0c;在SCL…

Linux[开发工具]

vim(多模式编辑器) vim是一个多模式的编译器!!命令模式是核心 vim 文件名 (数字)(进入编辑,光标处在第几行) esc切换模式 shift; >:(:wq保存并退出) 命令模式: 键盘的输入,默认被当做命令来看待 gg:光标快速定位到最开始 shiftgG:股那个表快速定位到最结尾 nshiftgG:光标…

hutools工具类中isNotEmpty与isNotBlank区分

基于以下两种情况。在判断的变量是String类型时&#xff0c; 判断是否为空&#xff0c;推荐使用isNotBlank(). 1. isNotEmpty 不会验证str中是否含有空字符串&#xff0c;而 isNotBlank方法会验证 public static boolean isNotEmpty(CharSequence str) {return false isEmpty…

算法相关概念

1 算法概述 1.1 算法概念 算法是特定问题求解步骤的描述&#xff0c;也是独立存在的一种解决问题的思想和方法 对于算法而言&#xff0c;实现他的编程语言无关紧要&#xff0c;重要的是思想和方法&#xff01;&#xff01;&#xff01; 公式&#xff1a;程序算法数据结构&a…

数据库基础与核心操作:从概念到实战的全面解析

目录 1 基本概念2 基本操作2.1 DCL2.2 DDL2.3 DML2.4 DQL(高级查询) 3 高级功能3.1 视图&#xff08;无参函数&#xff09;3.2 存储过程(有参函数)3.3 触发器 4 约束4.1 主键约束4.2 UNIQUE KEY&#xff08;唯一键约束&#xff09;4.3 FOREIGN KEY&#xff08;外键约束&#xf…

打造惊艳的渐变色下划线动画:CSS实现详解

引言&#xff1a;为什么需要动态下划线效果&#xff1f; 在现代网页设计中&#xff0c;微妙的交互效果可以显著提升用户体验。动态下划线特效作为一种常见的视觉反馈方式&#xff0c;不仅能够引导用户注意力&#xff0c;还能为页面增添活力。本文将深入解析如何使用纯CSS实现一…

【11408学习记录】考研英语语法核心:倒装句考点全解+真题演练

倒装句 英语语法总结——特殊句式倒装全部倒装介词短语形容词副词There be 部分倒装否定副词或词组位于句首only位于句首虚拟条件句省略if 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a;断句第三步&#xff1a;简化主句定语从句 英语 语法总结——特殊句式 倒装 …

upload-labs PASS 1-5通关

PASS-01 前端javascript检查 1&#xff0c;第一个提示javascript对上传的文件进行审查 2&#xff0c;javascript工作在前端页面&#xff0c;可以直接删除具有审查功能的代码 3&#xff0c;删除之后再上传一句话木马 上传成功&#xff0c;可以使用蚁剑进行连接&#xff0c;控制网…

GoogleTest:在Ubuntu22.04安装

1.首先克隆GoogleTest $ mkdir gtest $ cd gtest $ git clone git@github.com:google/googletest.git 克隆后的文件目录结构为 gtest/googletest$ tree -L 1 ├── build ├── BUILD.bazel ├── ci ├── CMakeLists.txt ├── CONTRIBUTING.md ├── CONTRIBUTORS ├─…

Transformer-LSTM-SVM回归

题目&#xff1a;Transformer-LSTM-SVM回归 文章目录 题目&#xff1a;Transformer-LSTM-SVM回归前言一&#xff1a;Transformer1. Transformer的原理1.1 Transformer的核心结构1.2 注意力机制1.4 位置编码1.5 损失函数 2. 完整案例 LSTMSVM 前言一&#xff1a;Transformer 1.…

AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”

所谓AI HR‌&#xff0c;是指将人工智能&#xff08;AI&#xff09;技术&#xff08;如机器学习、自然语言处理、大数据分析等&#xff09;应用于人力资源管理的各个环节&#xff0c;以提升效率、优化决策并改善员工体验。典型场景有&#xff1a; 在招聘、考勤、薪酬计算等重复…

浅析localhost、127.0.0.1 和 0.0.0.0的区别

文章目录 三者的解释三者的核心区别总结使用场景示例什么是回环地址常见问题开发工具中的地址使用为什么开发工具同时支持localhost和127.0.0.1&#xff1f;实际应用示例VSCode中的Live Server插件VSCode中的VUE项目IDEA中的Spring Boot应用 最佳实践建议 localhost、 127.0.0…

微信小程序鲜花销售系统设计与实现

概述 在鲜花电商行业快速发展的背景下&#xff0c;移动端销售平台成为花店拓展业务的重要渠道。幽络源平台今日分享一款功能完善的微信小程序鲜花销售系统&#xff0c;该系统实现了多角色管理、在线订购、会员服务等核心功能&#xff0c;为鲜花行业提供了完整的电商解决方案。…

端到端电力电子建模、仿真与控制及AI推理

在当今世界&#xff0c;电力电子不再仅仅是一个专业的利基领域——它几乎是每一项重大技术变革的支柱。从可再生能源到电动汽车&#xff0c;从工业自动化到航空航天&#xff0c;对电力转换领域创新的需求正以前所未有的速度增长。而这项创新的核心在于一项关键技能&#xff1a;…

Elastic Cloud Serverless 现在在 Google Cloud 上正式发布

作者&#xff1a;来自 Elastic Yuvraj Gupta Elastic Cloud Serverless 提供了启动和扩展安全、可观察性和搜索解决方案的最快方式 — 无需管理基础设施。 今天&#xff0c;我们很高兴宣布 Elastic Cloud Serverless 在 Google Cloud 上正式发布 — 现在已在爱荷华&#xff08;…

deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试

一、软件介绍 文末提供程序和源码下载 deepseek_ai_ida_plugin开源插件&#xff0c;用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试。FunctionRenamerDeepseekAI.cpp 此文件包含 Hex-Rays 反编译器的主要插件实现。它反编译当前函数…

信息系统项目管理工程师备考计算类真题讲解十一

一、运筹学 1&#xff09;线性规划 分析&#xff1a;设为获得最大利润&#xff0c;S应生产X件&#xff0c;K生产Y件 10X20Y<120 8X8Y<80 求MAX(12X16Y) 计算下面的方程式&#xff1a; 10X20Y120 8X8Y80 X8 2)交通运输问题&#xff1a; 分析&#xff1a; 此题采…

深入学习解读:《数据安全技术 数据分类分级规则》【附全文阅读】

该文详细阐述了数据安全技术的数据分类分级规则,内容分为基本原则、数据分类规则、数据分级规则及数据分类分级流程四大部分。 基本原则强调科学实用、动态更新、就高从严及53原则(虽表述不清,但可理解为多重原则的结合),同时要求边界清晰、点面结合。 数据分类规…