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

shell脚本运行方式 bash 和./区别

在 Linux 或 macOS 这类基于 Unix 的系统里,使用 ./ 运行脚本和使用 bash 运行脚本存在一些差异,下面为你详细说明:

1. 语法与使用方式

  • 使用 ./ 运行脚本
    若要使用 ./ 来运行脚本,需要确保脚本文件具备可执行权限,并且脚本文件的开头要指定解释器(例如 #!/bin/bash)。语法如下:
./script.sh
  • 使用 bash 运行脚本
    采用 bash 运行脚本时,脚本文件无需具备可执行权限,不过脚本文件的开头仍要指定解释器。语法如下:
bash script.sh

2. 可执行权限的要求

  • 使用 ./ 运行脚本
    此方法要求脚本文件拥有可执行权限。可以借助 chmod 命令为脚本文件添加可执行权限,示例如下:
chmod +x script.sh
  • 使用 bash 运行脚本
    该方法不要求脚本文件有可执行权限。即便脚本文件没有可执行权限,也能够使用 bash 来运行,例如:
bash script.sh

3. 解释器的指定

  • 使用 ./ 运行脚本
    脚本文件的开头必须指定解释器,不然系统无法知晓使用哪个程序来执行脚本。例如,在 Bash 脚本里,文件开头应写成 #!/bin/bash
  • 使用 bash 运行脚本
    虽然通常也会在脚本文件开头指定解释器,但使用 bash 运行脚本时,实际上是强制使用 Bash 作为解释器,所以即便文件开头指定的是其他解释器,也会以 Bash 来执行。

4. 环境变量和作用域

  • 使用 ./ 运行脚本
    脚本会在一个新的子 shell 中执行,这意味着脚本里设置的环境变量只在子 shell 内有效,不会影响到父 shell。
  • 使用 bash 运行脚本
    同样是在新的子 shell 中执行脚本,脚本里设置的环境变量也仅在子 shell 内有效,不会影响到父 shell。

示例说明

假设存在一个名为 test.sh 的脚本文件,内容如下:

#!/bin/bash
echo "Hello, World!"
  • 使用 ./ 运行脚本
chmod +x test.sh
./test.sh
  • 使用 bash 运行脚本
bash test.sh

使用 bash 命令运行脚本不需要脚本文件本身具备可执行权限,主要是基于以下原理:

执行机制差异

当你使用 bash 命令时,实际上是在明确告诉系统使用 bash 解释器来处理脚本文件。bash 作为一个已被系统认可并具备执行权限的程序,它可以读取并解释脚本文件里的内容。也就是说,系统执行的是 bash 程序,而脚本文件仅仅是作为 bash 程序的输入数据。

系统解析过程

在 Linux 或 macOS 这类系统中,文件的执行权限主要用于让系统明确是否可以直接将该文件当作可执行程序来运行。当你直接输入文件名(例如 ./script.sh)时,系统会检查文件的权限位。若文件没有可执行权限,系统就不会尝试执行它。

然而,当你使用 bash script.sh 时,系统会首先查找 bash 程序,由于 bash 通常存放在 /bin 或 /usr/bin 目录下,并且具备可执行权限,所以系统能够顺利执行 bash 程序。接着,bash 程序会读取 script.sh 文件的内容,并按照自身的规则来解释和执行这些内容,而不会依赖 script.sh 文件的可执行权限。

示例说明

假设存在一个名为 test.sh 的脚本文件,内容如下:

#!/bin/bash
echo "This is a test script."

当你使用 bash 命令运行这个脚本时,无需给 test.sh 文件添加可执行权限:

bash test.sh

系统会调用 bash 程序,bash 程序读取 test.sh 文件的内容并执行其中的命令,输出结果:

This is a test script.

综上所述,使用 bash 命令运行脚本时,系统执行的是 bash 程序,脚本文件仅作为输入数据,因此不需要脚本文件本身具备可执行权限。

相关文章:

shell脚本运行方式 bash 和./区别

在 Linux 或 macOS 这类基于 Unix 的系统里,使用 ./ 运行脚本和使用 bash 运行脚本存在一些差异,下面为你详细说明: 1. 语法与使用方式 使用 ./ 运行脚本: 若要使用 ./ 来运行脚本,需要确保脚本文件具备可执行权限&a…...

ShardingSphere+达梦数据库分表操作

背景 随着数字经济时代的全面到来,数据量呈现爆炸式增长,传统单机数据库在性能、扩展性和可用性方面面临严峻挑战。分布式数据库技术应运而生,成为解决海量数据存储与处理的关键方案。在这一背景下,Apache ShardingSphere作为一款…...

WordPress上传图片时显示“未提供数据”错误

在WordPress中上传图片时显示“未提供数据”的错误,通常是由多种原因引起的,以下是一些常见的问题及其解决方法: 1. 文件权限问题 WordPress需要正确的文件和目录权限才能正常上传图片。如果权限设置不正确,可能会导致无法上传图…...

AP CSA FRQ Q2 Past Paper 五年真题汇总 2023-2019

Author(wechat): bigshuang2020 ap csa tutor, providing 1-on-1 tutoring. 国际教育计算机老师, 擅长答疑讲解,带学生实践学习。 热爱创作,作品:ap csa原创双语教案,真题梳理汇总, AP CSA FRQ专题冲刺, AP CSA MCQ小题…...

海量数据场景题--查找两个大文件的URL

查找两个大文件共同的URL 给定 a、b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,找出 a、b 两个文件共同的 URL。内存限制是 4G。 操作逻辑: 使用哈希函数 hash(URL) % 1000​ 将每个URL映射到0-999的编号 文件A切割为a0, a1…...

Spring AI Alibaba 工具(Function Calling)使用

一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling):https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具(Tool)”或“功能调用(Function Calling&#xf…...

汽车方向盘开关功能测试的技术解析

随着汽车智能化与电动化的发展,方向盘开关的功能日益复杂化,从传统的灯光、雨刷控制到智能语音、自动驾驶辅助等功能的集成,对开关的可靠性、耐久性及安全性提出了更高要求。本文结合北京沃华慧通测控技术有限公司(以下简称“慧通…...

9-100V输入替代CYT5030/LM5030高压双路电流模式PWM控制器

产品描述: PC3530高压 PWM 控制器包含实现推挽和桥式拓扑所需的所有功能,采用电流模式控制,提供两个交替栅极驱动器输出。PC3530内置高压启动稳压器,可在 9V~100V 的宽输入电压范围内工作。芯片内部还集成有误差放大器、精密基准、两级过流保…...

详细讲解c++中线程类thread的实现,stl源码讲解之thread

Thread 本节我们来详细介绍一下c中的线程类thread&#xff0c;在讲解的过程中会用到大量模板的知识&#xff0c;可以去看c详解模板泛型编程&#xff0c;详解类模板的实现为什么不能放在cpp文件_泛型函数 cpo-CSDN博客 源码: template <class _Fn, class... _Args, enable_…...

PostgreSQL详解

第一章&#xff1a;环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包&#xff08;含pgAdmin&#xff09; 关键配置项说明&#xff1a; # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…...

系统思考—第五项修炼

感谢【汇丰】邀请&#xff0c;为其高阶管理者交付系统思考系列项目。这不仅是一次知识的传递&#xff0c;更是一次认知的升级。 系统思考&#xff0c;作为《第五项修炼》的核心能力&#xff0c;正在帮助越来越多的管理者突破碎片化决策的困局&#xff0c;建立看见全貌的智慧与…...

如何使用QuickAPI生成带参数的数据API(基于原生SQL)

目录 一、示例表结构 二、准备工作 三、创建带参数的数据API 步骤 1&#xff1a;登录 QuickAPI 平台 步骤 2&#xff1a;连接数据库 步骤 3&#xff1a;配置基础信息 步骤 4&#xff1a;编写 SQL 并添加参数 步骤 5&#xff1a;测试并发布API 步骤 6&#xff1a;验证A…...

RHINO 转 STL,解锁 3D 打印与工业应用新通道

一、RHINO 格式介绍 RHINO 是一款功能强大的三维建模软件&#xff0c;其对应的文件格式&#xff08;.3dm&#xff09;能够精确地存储复杂的三维模型数据。它支持多种几何类型&#xff0c;包括 NURBS&#xff08;非均匀有理 B 样条曲线&#xff09;、多边形网格等。这种格式的优…...

PySide6属性选择器设置样式避坑

总所周知&#xff0c;Qt中qss语法支持属性选择器&#xff0c;通过setProperty设置key和value&#xff0c;支持在多种样式之前切换。今天使用了一下PySide6的属性选择器&#xff0c;发现了一个问题。完整代码见最后。 首先&#xff0c;先写一段qss样式&#xff0c;用来设置按键样…...

BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测,附模型报告

BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型报告 目录 BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型报告预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-BiLSTM、CNN-…...

ADS 学习和培训资源 - Keysight ADS

在 Signal Edge Solutions&#xff0c;我们是 Keysight ADS 的忠实用户&#xff0c;因此我们明白&#xff0c;使用和学习这款强大的仿真工具有时可能非常困难。 因此&#xff0c;我们编制了一份清单&#xff0c;列出了一些我们最喜欢的 ADS 学习和培训资源&#xff0c;以帮助您…...

【leetcode刷题记录】(java)数组 链表 哈希表

文章目录 四、题目之&#xff1a;代码随想录(1) 代码随想录&#xff1a;数组[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)暴力解:双指针&#xff1a; [977. 有序数组的平方](https://leetcode.…...

ngx_http_core_root

定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t …...

大模型在支气管肺癌预测及临床决策中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、大模型预测支气管肺癌的原理与技术基础 2.1 大模型简介 2.2 数据收集与预处理 2.3 模型训练与优化 三、术前预测 3.1 病情评估 3.1.1 肿瘤大小、位置及分期预测 3.1.2 转移风险预测 3.2 手术风险预测 3.2.1 患…...

机器人原点丢失后找回原点的解决方案与步骤

机器人原点丢失后找回原点的解决方案与步骤 在机器人运行过程中&#xff0c;原点丢失可能导致定位错误、运动失控等问题&#xff0c;常见于机械臂、AGV&#xff08;自动导引车&#xff09;、3D打印机等设备。以下是针对原点丢失问题的系统性解决方案及详细步骤&#xff0c;涵盖…...

CSS SEO、网页布局、媒体查询

目录 一、SEO 头部三大标签 1. Title 标签&#xff08;标题&#xff09; 核心作用 优化规范 示例 2. Meta Description&#xff08;描述&#xff09; 核心作用 优化规范 示例 3. Viewport 标签&#xff08;视口&#xff09; 核心作用 优化规范 4. 完整 SEO 头部模…...

SolidJS 深度解析:高性能响应式前端框架

SolidJS 是一个新兴的响应式前端框架&#xff0c;以其极致的性能、简洁的语法和接近原生 JavaScript 的开发体验而闻名。它结合了 React 的声明式 UI 和 Svelte 的编译时优化&#xff0c;同时采用细粒度响应式更新&#xff0c;避免了虚拟 DOM&#xff08;Virtual DOM&#xff0…...

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速&#xff0c;传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统&#xff0c;通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…...

解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“

问题描述 在 Ubuntu/Debian 系统中运行 sudo apt-get install 或 sudo apt update 时&#xff0c;遇到以下错误&#xff1a; E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/)&#xff0c;是否有其他进程正占用它&#…...

OpenGL 着色器

一、‌着色器基础结构‌ ‌版本声明与入口函数‌ ‌首行版本声明‌&#xff1a;必须指定 GLSL 版本和模式&#xff08;如 #version 450 core&#xff09;‌。 #version 450 core // 声明使用 OpenGL 4.5 Core Profile ‌入口函数‌&#xff1a;所有着色器的入口均为 main() 函…...

代码随想录刷题day53|(二叉树篇)105.从前序与中序遍历序列构造二叉树(▲

目录 一、二叉树基础知识 二、构造二叉树思路 2.1 构造二叉树流程&#xff08;先序中序 2.2 递归思路 三、相关算法题目 四、易错点 一、二叉树基础知识 详见&#xff1a;代码随想录刷题day34|&#xff08;二叉树篇&#xff09;二叉树的递归遍历-CSDN博客 二、构造二叉…...

【leetcode刷题日记】lc.560-和为 K 的子数组

目录 1.题目 2.代码 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入…...

计算机期刊推荐 | 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用

Computers, Materials & Continua 学科领域&#xff1a; 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用 期刊类型&#xff1a; SCI/SSCI/AHCI 收录数据库&#xff1a; SCI(SCIE),EI,Scopus,知网(CNK…...

K8S安装及部署calico(亲测有用[特殊字符])

一、 基础部署&#xff08;三台均部署&#xff09; 1. 关闭防火墙并修改网络为aliyun 要保证网络可以使用&#xff0c;可以将DNS的指向修改为114.114.114.114和8.8.8.8这两个。 systemctl stop firewalld && systemctl disable firewalld sed -i s/enforcing/disabl…...

etcd性能测试

etcd性能测试 本文参考官方文档完成etcd性能测试&#xff0c;提供etcd官方推荐的性能测试方案。 1. 理解性能&#xff1a;延迟与吞吐量 etcd 提供稳定、持续的高性能。有两个因素决定性能&#xff1a;延迟和吞吐量。延迟是完成一项操作所花费的时间。吞吐量是在某个时间段内…...

在shell脚本内部获取该脚本所在目录的绝对路径

目录 需求描述 方法一&#xff1a;使用 dirname 和 readlink 命令 方法二&#xff1a;使用 BASH_SOURCE 变量 方法三&#xff1a;仅使用纯 Bash 实现 需求描述 工作中经常有这样情况&#xff0c;需要在脚本内部获取该脚本自己所在目录的绝对路径。 假如有一个脚本/a/b/c/…...

JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例

提醒 要求了解或者熟练掌握以下知识点 spring 事务mysql 脏读如何保证缓存和数据库数据一致性延迟双删分布式锁并发编程 原子操作类 前言 在起草这篇博客之前 我做了点功课 这边我写的是一个示例代码 数据层都写成了 mock 的形式(来源于 JUnit5) // Dduo import java.u…...

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测&#xff08;程…...

【Python】天气数据可视化

1. Python进行数据可视化 在数据分析和科学计算领域&#xff0c;Python凭借其强大的库和简洁的语法&#xff0c;成为了众多开发者和科研人员的首选工具。数据可视化作为数据分析的重要环节&#xff0c;能够帮助我们更直观地理解数据背后的规律和趋势。本文将详细介绍如何使用P…...

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…...

Ubuntu 重置密码方法

目录 修改过 root 密码&#xff0c;重置密码的方法没改过 root 密码‌&#xff0c;重置密码的方法 修改过 root 密码&#xff0c;重置密码的方法 Ubuntu 默认禁用root用户&#xff0c;意思就是安装好Ubuntu系统后&#xff0c;root用户默认是没有密码的&#xff0c;普通用户通过…...

电机控制常见面试问题(二十)

文章目录 一.整流电路绕组接法二.电机为什么需要转速器三.电机转矩产生原理四.电机控制中载波频率大小的确定五.开关周期 Tpwm 一.整流电路绕组接法 为了引出直流的输出&#xff0c;一定要在整流变压器的二次侧引出零线&#xff0c;所以二次侧绕组必须接成星形 一次绕组必须要…...

Linux系统之yum本地仓库创建

目录 一.Linux软件安装 1.Rpm包安装 2.yum本地仓库安装 二.yum本地仓库建立 三.编译 一.Linux软件安装 软件安装共2种安装方式&#xff0c;通过rpm包安装或通过yum仓库库安装。 先下载安装包命令的方式去安装软件包安装结束 得到一个可以执行程序 绝对路径下的程序 1.…...

未来技术的发展趋势与影响分析

区块链技术在版权中的应用越来越受到关注。它的基本原理是通过分布式账本将每一份作品的版权信息储存起来&#xff0c;确保这些信息不可篡改、不可删除。这就意味着&#xff0c;当创作者发布作品时&#xff0c;可以在区块链上登记相关信息。这样&#xff0c;任何人都能验证版权…...

ROS2 架构梳理汇总整理

文章目录 前言正文机器人平台整体架构&#xff08;ROS2&#xff09;图一、个人理解整体架构 ROS2架构图一、个人理解ROS2整体架构图二、开发者整理ROS2整体架构图三、Intel整理ROS2整体架构图四、DDS具体架构说明 ROS2 Control架构图一、官方整整理ROS2 Control整体架构 总结 前…...

蓝桥杯算法精讲:二分查找实战与变种解析

适合人群&#xff1a;蓝桥杯备考生 | 算法竞赛入门者 | 二分查找进阶学习者 目录 一、二分查找核心要点 1. 算法思想 2. 适用条件 3. 算法模板 二、蓝桥杯真题实战 例题&#xff1a;分巧克力&#xff08;蓝桥杯2017省赛&#xff09; 三、二分查找变种与技巧 1. 查找左边…...

多层感知机实现

激活函数 非线性 ReLU函数 修正线性单元 rectified linear unit relu(x)max(0,x) relu的导数&#xff1a; sigmoid函数 s i g m o i d ( x ) 1 1 e − x sigmoid(x)\frac{1}{1e^{-x}} sigmoid(x)1e−x1​ 是一个早期的激活函数 缺点是&#xff1a; 幂运算相对耗时&…...

Linux进程控制--进程创建 | 进程终止 | 进程等待 | 进程替换

1.进程创建 现阶段我们知道进程创建有如下两种方式&#xff0c;起始包括在以后的学习中有两种方式也是最常见的&#xff1a; 1、命令行启动命令(程序、指令)。 2、通过程序自身&#xff0c;使用fork函数创建的子进程。 1.1 fork函数 在linux操作系统中&#xff0c;fork函数是…...

Linux 网络编程(二)——套接字编程简介

文章目录 2 Socket 套接字 2.1 什么是 Socket 2.2 Socket编程的基本操作 2.3 地址信息的表示 2.4 网络字节序和主机字节序的转换 2.4.1 字节序转换 2.4.2 网络地址初始化与分配 2.5 INADDR_ANY 2.6 Socket 编程相关函数 2.7 C标准中的 main 函数声明 2.8 套接字应用…...

串行通信 与 并行通信 对比

总目录 一、并行通信 1. 定义与核心特点 1&#xff09; 定义 并行通信是指通过多条数据线同时传输一组数据的各个位&#xff08;如8位、16位或更多&#xff09;&#xff0c;以字节或字为单位进行数据交换的通信方式。 2&#xff09;核心特点 特点描述传输速度快多位同时传…...

基于springboot+vue的北部湾地区助农平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

Docker技术系列文章,第七篇——Docker 在 CI/CD 中的应用

在当今快速发展的软件开发领域&#xff0c;持续集成与持续部署&#xff08;CI/CD&#xff09;已经成为提高软件交付效率和质量的关键实践。而 Docker 作为一种流行的容器化技术&#xff0c;为 CI/CD 流程提供了强大的支持。通过将应用及其依赖项打包成容器&#xff0c;Docker 确…...

Hive SQL中 ?+.+ 的用法,字段剔除

一、含义 ?. 的用法代表剔除表中的特定字段&#xff0c;建议按照字段顺序列出以确保正确性。 二、参数设置 -- 首先需要设置一个参数&#xff1a; set hive.support.quoted.identifiersNone; --然后指定要剔除哪个字段 select (dateline)?. from test.dm_user_add三、举例…...

Vue学习笔记集--pnpm包管理器

pnpm包管理器 官网&#xff1a; https://www.pnpm.cn/ pnpm简介 pnpm全称是performant npm&#xff0c;意思为“高性能的npm”&#xff0c;它通过硬链接和符号链接共享依赖&#xff0c;提升安装速度并减少存储占用。 功能特点 节省磁盘空间&#xff1a;依赖包被存放在一个统…...

游戏交易系统设计与实现(代码+数据库+LW)

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对游戏交易信息管理的提升&#x…...