【嵌入式开发 Linux 常用命令系列 14 -- source hello.sh 和 ./hello.sh 的区别】

文章目录

    • source hello.sh 和 ./hello.sh 的区别
      • source hello.sh
      • ./hello.sh
      • 使用场景

source hello.sh 和 ./hello.sh 的区别

问题背景
创建了目录~/.local/bin 并将其在.bashrc文件中添加到path 中,export PATH=$PATH:/home/sam/.local/bin。 在 ~/.local/bin 创建一个 shell 脚本 hello.sh

当我在终端直接执行hello 时会报错,但是如果我按照下面方法执行 helo.sh 脚本就没有问题,方法如下:
.bashrc 中添加alias mk-hello =‘source ~/.local/bin/hello.sh’ 然后在终端执行 mk-hello 时就没有报错。

接下来将详细介绍这两者的区别。

source hello.sh

  • 环境source 命令在当前 shell 的上下文环境中执行脚本。这意味着脚本中所有的变量、函数和修改环境变量的命令,都会影响到当前的 shell 环境。
  • 执行权限:执行 source 命令不需要脚本文件具有执行权限,只需要读取权限就可以。
  • 子进程:不会创建新的子进程来执行脚本。脚本中的命令是在当前 shell 进程中执行的。
  • 退出代码:如果脚本中有退出命令 exit,它会导致当前 shell 会话退出。

./hello.sh

  • 环境:以 ./hello.sh 方式执行脚本会在一个新的子 shell 中运行,不会影响当前 shell 的环境(变量、函数定义等不会‘泄漏’到当前环境中)。
  • 执行权限:脚本文件必须有执行权限(可以使用 chmod +x hello.sh 命令来添加执行权限)。
  • 子进程:创建新的子进程(子 shell)来执行脚本。脚本中的命令是在这个新的子进程中执行的。
  • 退出代码:如果脚本中有退出命令 exit,它只会终止子 shell,不会影响到父 shell。

使用场景

选择使用 source 还是 ./ 执行脚本,通常取决于你的目标:

  • 如果你想要运行脚本并保持其对环境的更改,如定义新的环境变量或更改现有的变量,那么你应该使用 source 命令。
  • 如果你想要运行脚本并且不希望其更改当前的环境,或者你正在运行一个独立的程序,那么使用 ./ 方式执行会更合适。

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

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

相关文章

KVO(键值观察)

KVO(键值观察)是Objective-C 对观察者设计模式的一种实现。 举个栗子:指定一个被观察对象(A类),当被观察对象某个属性(A中的字符串name)发生更改时,对象(B类)会获得通知,并作出相应…

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》&#xff…

记录 | docker报错:Key permissions are too open: Set correct permissions

docker 报错: Key permissions are too open: Set correct permissions 具体的: WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /app/.ssh/id_rsa are too open. It is required that your private key files are NOT accessibl…

ls高级用法

1 使用通配符列出文件夹的内容 ls ~/videos/*.wmv 刚才你已经学会了如何在包含多个文件的目录中查找文件,但是还有一种更快的方法。如果你知道正在找的Tiger Woods的视频文件是Windows Media格式的,那么这个文件名一定是以.wmv为后缀的,这时…

认识缓存,一文读懂Cookie,Session缓存机制。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

一、CM4树莓派系统烧录

操作系统(Raspberry Pi OS)应用程序 Raspberry Pi OS系统(树莓派推荐系统):较小的内存占用、较高的易用性以及对浮点单元的支持 浮点单元:浮点运算单元(FPU)是处理器中专门进行浮点…

windows redis 允许远程访问配置

安装好windows版本的redis,会以服务方式启动,但是不能远程访问,这个时候需要修改配置。redis安装路径下会有2个配置文件,究竟需要怎么修改才能生效呢?看下图 这里的redis服务指定了是redis.windows-service.conf文件&…

【CMU15445】Fall 2019, Project 4: Logging Recovery 实验记录

目录 实验准备实验测试Task 1: LOG MANAGER 实验准备 官方说明:https://15445.courses.cs.cmu.edu/fall2019/project4/ 实验测试 Task 1: cd build make log_manager_test ./test/log_manager_testTask 1: LOG MANAGER Log Manager 有一个全局的实例&#xff0…

Docker | 发布镜像到镜像仓库

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容:Docker | 发布镜像到镜像仓库 📚个人知识库: [Leo知识库]https://gaoziman.gitee.io/bl…

骨灰级程序员那些年曾经告诉我们的高效学习的态度

一、背景 以前阅读陈皓老师的左耳听风专栏中关于如何高效学习的总结让我收货颇丰,今天总结了一下,分享给大家 老师说: 学习是一件“逆人性”的事,就像锻炼身体一样,需要人持续付出,会让人感到痛苦&#…

c语言堆排序(详解)

堆排序 堆排序是一种基于二叉堆数据结构的排序算法,它的基本概念包括: 建立堆:将待排序的列表构建成一个二叉堆,即满足堆的性质的完全二叉树,可以是最大堆或最小堆。最大堆要求父节点的值大于等于其子节点的值&#x…

基于node 安装express后端脚手架

1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方:这个时候安装特别慢,最后导致不成功 解决方法:npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…

Qt之Ui样式表不影响子类的配置

Qt之Ui样式表不影响子类的配置 问题 在ui界面上布局时,当对容器进行样试设计时,会对容器内其它成员对象也进行了修改 分析 对应*.ui文件内容 从这个写法来看,它的样式属性会影响其成员对象样式属性。 解决方法 在容器的样式表中写时适…

如何将Galaxybase图数据库应用于电力设备管理

导读 近日,受强冷空气影响,部分北方地区出现不同程度的降雪,并持续降温。据国家电网发布的预警通知,要求启动预警响应和应急机制,密切跟踪灾害预警信息和应急响应情况,滚动研判分析覆冰、积雪、低温等对电…

beyond compare文件夹比较时候文本乱码问题解决

“格式”,在下面的左侧编码重写和右侧编码覆盖选择 GB2312/UTF-8/GBK,这个可以根据自己喜好和文本自身的encode选择。

Golang中使用errors返回调用堆栈信息

Golang的errors包返回堆栈信息 标准库errors提供了处理错误的方法。比如常用的 func New(text string) error 用该方法处理错误信息,就只会输出自定义的 text 到控制台或者日志文件,没有其它辅助排查的信息输出,所以常规我们就只能根据 te…

任务系统设计

基本结构 条件 完成或改变特定的条件,触发任务状态的改变,一般由各个系统触发; 任务 一般来说,当任务结束,也就是相应的条件完成,比如常见的主线、支线、每日、每周、委托、成就任务等 主要的配置项 …

跟着我学Python基础篇:08.集合和字典

往期文章 跟着我学Python基础篇:01.初露端倪 跟着我学Python基础篇:02.数字与字符串编程 跟着我学Python基础篇:03.选择结构 跟着我学Python基础篇:04.循环 跟着我学Python基础篇:05.函数 跟着我学Python基础篇&#…

从零构建属于自己的GPT系列6:模型部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

RocketMQ源码 Broker-ConsumerFilterManager 消费者数据过滤管理组件源码分析

前言 ConsumerFilterManager 继承了ConfigManager配置管理组件,拥有将内存数据持久化到磁盘文件consumerFilter.json的能力。它主要负责,对在消费者拉取消息时,进行消息数据过滤,且只针对使用表达式过滤的消费者有效。 源码版本&…