bash file_name 和 ./file_name 之间的区别

问题

我在脚本中用 li.sh 创建了一个文件

#!/bin/env bash

read -p 'What is your name' name
echo $name

当我尝试使用命令执行时./li.sh,我收到了权限被拒绝的错误,但是当我使用命令执行时bash li.sh,它没有任何错误。使用运行是否安全bash li.sh?

我想知道./li.sh 和 bash li.sh 之间的区别。

解决方案

我认为你无法运行 shell 脚本的原因./li.sh是你没有将文件权限设置为可执行

你可以看看这个 https://www.redhat.com/en/blog/linux-file-permissions-explained

TL;DR:你可以运行sudo chmod +x li.sh,然后继续./li.sh

假设您在运行bash li.sh和时位于同一目录中./li.sh,则它们应该以相同的方式工作。当您指定时bash li.sh,它首先运行bash并执行文件,而当您运行时./li.sh,它会读取文件,看到有#!符号,它将运行/bin/env bash,然后它将继续执行脚本。

以下是运行时发生的步骤bash li.sh:

你的 shell 会在你的 中寻找bash可执行文件$PATH,并在类似 的地方找到它/bin/bash。
你的 shell 将要求操作系统执行该程序,并将其li.sh作为参数传递
bash启动,解析其参数,并看到它被要求运行li.sh。
bash将尝试打开li.sh文件进行读取。当它这样做时,操作系统将确认您的用户对该文件具有读取权限
bash然后开始解释(“运行”)脚本的内容。
重要的是,操作系统不知道你想要这个文件做什么。一旦你用读权限打开一个文件,它就不知道你是要打印它(例如cat li.sh)、压缩它(例如zip li.sh)还是用于任何其他目的。重要的是你有读权限,你bash确实这样做了。恰好以与直接运行它相同的方式解释它。

将此与您刚运行时发生的步骤进行对比./li.sh:

你的 shell 将要求操作系统直接执行该文件
操作系统将看到它以“shebang”(#!)开头,而不是0x7F 0x45 0x4c 0x46每个Linux ELF 可执行文件都以的通常序列开头
这告诉它,它不能直接执行文件,而是需要运行 shebang 中列出的任何内容
它解析#!/bin/env bashshebang并执行/bin/env,并向其传递2个参数:bash li.sh
env然后将运行bash li.sh
bash然后将开始解释脚本。
由于操作系统知道您访问该文件的明确目的是执行它,因此您的执行权限比您的读取权限更重要。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节:在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面,我们学习了许多的Linux命令和高级技巧,这些知识点比较零散,同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试,它会优先读取 .env 配置,然后再读取 database.php 的配置; 如果禁用了 .env 配置,则会读取数据库连接的默认配置: # .env文件,部署服务器,请禁用我 我们可以…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…

vue跳转传参

path 跳转只能使用 query 传参 ,name 跳转都可以 params &#xff1a;获取来自动态路由的参数 query &#xff1a;获取来自 search 部分的参数

Android 最新的AndroidStudio引入依赖失败如何解决?如:Failed to resolve:xxxx

错误信息&#xff1a; 在引入依赖时报错&#xff1a;Failed to resolve: xxx.xxxx:1.1.0 解决方案&#xff1a; 需要修改maven库的代理&#xff0c;否则就需要翻墙编译 新的AndroidStudio版本比较坑&#xff0c;修改代理的位置发生了变化&#xff1a; 最新变化&#xff1a;…

Mysql每日一题(行程与用户,困难※)

今天给大家分享一个截止到目前位置&#xff0c;我遇到最难的一道mysql题目&#xff0c;非常建议大家亲手做一遍 完整代码如下&#xff0c;这道题的主要难点是它有两个外键&#xff0c;以前没遇到过&#xff0c;我也没当回事&#xff0c;分享一下错误经验哈 当时我写的where判断…

深度学习知识点5-马尔可夫链

马尔科夫链的思想&#xff1a;过去所有的信息都已经被保存到了现在的状态&#xff0c;基于现在就可以预测未来。 The future is independent of the past given the present 马尔可夫链属于随机过程课程&#xff08;使用统计模型一些事物的过程进行预测和处理&#xff09; 概…

飞凌嵌入式RK3576核心板已适配Android 14系统

在今年3月举办的RKDC2024大会上&#xff0c;飞凌嵌入式FET3576-C核心板作为瑞芯微RK3576处理器的行业首秀方案重磅亮相&#xff0c;并于今年6月率先量产发货&#xff0c;为客户持续稳定地供应&#xff0c;得到了众多合作伙伴的认可。 FET3576-C核心板此前已提供了Linux 6.1.57…

css文字间距撑满横向距离

效果&#xff1a; 代码&#xff1a; 、 text-align:justify;text-align-last: justify;

Dynamo介绍

一、介绍 1、简介 Amazon DynamoDB 是由 AWS 提供的一种完全托管的 NoSQL 数据库服务&#xff0c;适用于高性能、可扩展的应用程序。它设计用于处理大规模的数据存储和高速数据访问&#xff0c;广泛应用于需要低延迟、高吞吐量的场景&#xff0c;如移动应用、电商、游戏后端、…

【Linux】HTTP协议和HTTPS加密

文章目录 HTTP1、概念2、认识URL3、协议格式、请求方法和状态码4、HTTP请求和响应报头5、Cookie和Session HTTPS1、对称和非对称加密2、对称非对称加密安全分析3、证书 HTTP 1、概念 我们在应用层定制协议时&#xff0c;不建议直接发送结构体对象&#xff0c;因为在不同的环境…

FlinkPipelineComposer 详解

FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制&#xff0c;提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件&#xff0c;描述source sink transform等主要信息 由FlinkPipelineComposer解析&#xff0c…

Python中如何获取HTTP请求的Response Body

目录 一、引言 二、使用urllib库获取Response Body 1. 基本用法 2. 发送POST请求 三、使用requests库获取Response Body 1. 安装requests库 2. 基本用法 3. 发送POST请求 4. 处理JSON响应 四、高级用法 1. 处理请求头 2. 设置超时 3. 处理Cookies 五、案例&#…

从华为到创业公司

我有一个朋友&#xff0c;在华为工作了很长一段时间&#xff0c;一年多前&#xff0c;他从华为出来到了一家创业公司。 周末趁着有时间&#xff0c;我跟他聊了下关于从华为到创业公司的一些问题&#xff0c;总结给大伙看看。 ▎1 在华为工作和在创业公司工作最大的差别是什么呢…

如何解决由于找不到d3dx9_43.dll导致游戏启动失败?这里是如何解决的完整指南

遇到“由于找不到d3dx9_43.dll”错误时&#xff0c;很多用户可能会感到困惑和无助。这个问题通常发生在尝试启动游戏或使用基于DirectX的应用程序时。d3dx9_43.dll是Microsoft DirectX软件的一部分&#xff0c;专门用于处理复杂的图形计算&#xff0c;缺少它意味着某些图形功能…

Matlab2022b安装MinGW64

1 问题引入 能找到这个问题的&#xff0c;一定就是在matlab中用mex这个编译命令的时候出现下面的错误&#xff0c;才会来找解决的办法。 首先在网上众多资料中一定是让你先去matlab窗口的这个Add-Ons进行添加&#xff0c;但是很多情况下因为大家装的版本问题&#xff0c;都会…