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

【Linux知识】exec命令行详解

文章目录

    • 概述
    • 主要用途
    • 和 bash 有什么区别?

概述

在 Linux 系统中,exec 命令用于执行一个可执行文件,替换当前进程的映像。也就是说,当你在终端中使用 exec 命令后,当前的 shell 会被替换为 exec 指定的程序,并且不会返回原来的 shell。

以下是 exec 命令的一些基本用法和选项:

  1. 基本用法

    exec [OPTION]... COMMAND [ARG]...
    
  2. 选项

    • -a name:设置新进程的命令名称为 name
    • -c:使用 COMMAND 的环境变量。
    • -e path:使用 path 作为新进程的文本段。
    • -l [COMMAND]--login [COMMAND]:像登录 shell 一样运行 COMMAND。
    • -v:显示版本信息并退出。
    • --help:显示帮助信息并退出。
  3. 示例

    • 替换当前 shell 为 bash
      exec bash
      
    • 替换当前 shell 为 vim 编辑器,并设置新进程的命令名称为 vi
      exec -a vi vim
      

请注意,一旦使用了 exec,当前的 shell 就会被替换,除非你使用 exec 来启动一个新的 shell(比如 exec bash),否则你不会回到原来的 shell。这意味着如果你在脚本中使用 exec,脚本执行完毕后不会有任何返回,因为 exec 已经替换了当前的 shell 进程。

主要用途

exec 命令在 Linux 和 Unix 系统中的用途广泛,以下是一些具体的用途和相应的例子:

  1. 替换当前 shell

    • 用途:当你想要完全切换到另一个程序,并且不再返回到当前 shell 时。
    • 例子:
      exec vim
      
      这条命令会用 vim 编辑器替换当前的 shell,一旦退出 vim,原来的 shell 将不会恢复。
  2. 运行后台进程

    • 用途:在后台运行一个进程,并且不阻塞当前 shell。
    • 例子:
      exec 3<>/tmp/mypipe ; some_command <&3 >&3 3<&-
      
      这条命令创建了一个管道文件 /tmp/mypipe 并将其与文件描述符 3 绑定,然后执行 some_command,其输入输出都通过这个管道进行,而当前 shell 仍然可用。
  3. 重定向标准输入输出

    • 用途:将程序的标准输入输出重定向到文件。
    • 例子:
      exec > output.txt 2> error.txt
      exec ls
      
      这会将 ls 命令的标准输出重定向到 output.txt,标准错误重定向到 error.txt
  4. 改变进程名称

    • 用途:在 ps 命令中显示不同的进程名称。
    • 例子:
      exec -a my_program /path/to/program
      
      这会将当前 shell 的进程名称改为 my_program,而实际执行的是 /path/to/program
  5. 登录 shell 模式

    • 用途:以登录 shell 的方式执行命令,加载用户的 shell 配置。
    • 例子:
      exec -l bash
      
      这会以登录 shell 的方式启动一个新的 bash shell,加载用户的 .bash_profile.profile
  6. 改善脚本性能

    • 用途:在脚本中执行命令时,减少进程数量。
    • 例子:
      #!/bin/bash
      exec 5<>/dev/tcp/somehost/someport
      cat >&5
      exec 5<&-
      
      这个脚本创建了一个到 somehostsomeport 的 TCP 连接,并将其与文件描述符 5 绑定,然后通过这个连接发送数据。
  7. 创建守护进程

    • 用途:创建一个守护进程,该进程在后台运行,不占用前台终端。
    • 例子:
      exec /path/to/daemon &
      
      这条命令会将 daemon 程序放到后台执行,并且不会占用前台终端。
  8. 环境隔离

    • 用途:为特定程序创建一个全新的环境。
    • 例子:
      exec -c env /path/to/program
      
      这会为 /path/to/program 创建一个新的环境,其中不包含当前 shell 的环境变量。

这些例子展示了 exec 命令的灵活性和多样性,它可以根据需要以多种方式使用,以适应不同的场景和需求。

和 bash 有什么区别?

exec 命令和 bash 有一些关键的区别,主要体现在它们的行为和用途上:

  1. 进程替换

    • exec 用于替换当前的 shell 进程。当你执行 exec 命令时,当前的 shell 进程会被替换为 exec 指定的程序,而不会创建新的进程。
    • bash 是一个独立的 shell 程序,当你启动 bash 时,它会创建一个新的进程。
  2. 返回行为

    • 使用 exec 执行命令后,如果命令成功执行,当前的 shell 进程将被替换,不会返回到原来的 shell。
    • 使用 bash 启动一个新的 shell 会创建一个新的 shell 进程,你可以在新的 shell 中执行命令,并且在执行完毕后可以返回到原来的 shell。
  3. 用途

    • exec 通常用于脚本中,当你想要替换当前的 shell 环境或者在后台执行一个命令时使用。
    • bash 是一个交互式的命令解释器,用于执行用户输入的命令,也可以用于编写和执行 shell 脚本。
  4. 环境变量和工作目录

    • exec 会继承当前 shell 的环境变量和工作目录,除非你使用特定的选项来改变这些(比如 -a 来改变命令名称,或者 -e 来改变环境变量)。
    • bash 在启动时会读取配置文件(如 .bashrc/etc/profile),并设置自己的环境变量和工作目录。
  5. 脚本中的使用

    • 在 shell 脚本中,exec 可以用来执行一个命令,并替换当前的 shell 进程,这在某些情况下可以减少进程数量,提高效率。
    • bash 通常用于启动一个新的 shell 进程来执行脚本或者命令。
  6. 退出状态

    • exec 命令本身没有退出状态,因为它替换了当前进程。被 exec 执行的命令的退出状态会成为当前进程的退出状态。
    • bash 作为一个新的进程,有自己的退出状态,当 bash 进程结束时,它的退出状态会被返回。

总结来说,exec 是一个用于替换当前进程的命令,而 bash 是一个独立的 shell 程序,用于解释和执行命令。两者在 shell 编程和命令执行中扮演着不同的角色。

相关文章:

【Linux知识】exec命令行详解

文章目录 概述主要用途和 bash 有什么区别&#xff1f; 概述 在 Linux 系统中&#xff0c;exec 命令用于执行一个可执行文件&#xff0c;替换当前进程的映像。也就是说&#xff0c;当你在终端中使用 exec 命令后&#xff0c;当前的 shell 会被替换为 exec 指定的程序&#xff…...

【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)

【学术小白的学习之路】基于情感词典的情感分析 1.基础函数1.1 判断情感词的否定词数量1.2 导入情感词典1.3 切分句子1.3.1为什么划分1.3.2 划分代码 1.4 完整代码 2.导入词典3.中文情感分析算法思路4.1情感词获取思路4.2 计算情感分值4.3 得分的归一化处理 4.实证5.总结 本文的…...

Linux 中 grep、sed、awk 命令

1. awk&#xff1a;强大的文本分析工具 awk&#xff0c;全称“Awk语言”&#xff0c;是一种专门用于处理文本文件的语言。它不仅能够根据关键字匹配某一行&#xff0c;还能进行复杂的文本分析和处理。awk的语法简洁明了&#xff0c;功能强大&#xff0c;是文本处理领域的佼佼者…...

一起考高项啊--现代化基础设施(工业互联网)

1、工业互联网的内涵和外延 工业互联网不是互联网在工作的简单应用&#xff0c;是具有更为丰富的内涵和外延。 它既是工业数字化、网络化、智能化转型的基础设施&#xff0c;也是互联网、大数据、人工智能与实体经济深度融合的应用模式&#xff0c;同时也是一种新业态、新产业…...

python学opencv|读取图像(二十)使用cv2.circle()绘制圆形进阶

【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十&#xff09;使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单&#xff0c;因此可以自由操作的空间也就大&#x…...

期权懂|如何减小个股期权交易中的风险?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 如何减小个股期权交易中的风险&#xff1f; 一、选择合适的期权合约 &#xff08;1&#xff09;选择活跃的期权合约&#xff1a;投资者应优先选择交易活跃的期权合约。交易活跃的…...

ubuntu20.04 wget下载--段错误 (核心已转储)

用wget下载时总是在快下载完成时遇到段错误 untu2004-9.1.0_1.0-1_am 99%[> ] 1.63G 3.11MB/s 剩余 1s s段错误 (核心已转储)有以下两种解决方法&#xff1a; 1.手动下载 wget后面就是要下载的资源的链接&#xff0c;直接复制到浏览器中下载即可 如&#xff1a…...

怎么样保持mysql和redis数据一致性

保持 MySQL 和 Redis 数据的一致性是一个常见的挑战,因为 MySQL 是传统的关系型数据库,而 Redis 是内存数据库,通常用于缓存和高性能存储。这两者的数据更新方式不同,特别是当 Redis 用作缓存时,可能会存在缓存和数据库之间的数据不一致问题。为了保持数据一致性,通常可以…...

剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变

LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的左上角为 (row1, col1) &#xff0c;右下角为 (row2, col2) 。 实现 NumMatrix 类&#xff1a; NumMatrix(…...

aosp15 - Activity生命周期切换

本文探查的是&#xff0c;从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点&#xff0c;为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…...

vxe-table 虚拟滚动的动态响应

虚拟滚动主要是在有限范围内渲染想要显示的数据&#xff0c;主要体现在懒加载数据和动态渲染上。如何提高虚拟滚动的操作性呢&#xff1f;请看本章解析 1.什么是虚拟滚动&#xff1f;代码如何实现&#xff1f; VXE-Table提供了一种名为“虚拟滚动”的功能&#xff0c;该功能可…...

quasar dev 命令卡住很久

别以为这是一个瞬间的截图&#xff0c;其实停留在这里很久很久。 折腾挺久&#xff0c;无论npm run dev:proxy还是 quasar dev&#xff0c;都是一样的情况。 最终解决办法&#xff1a; 有语法问题&#xff0c;通过 quasar build 命令暴露出来错误所在的行数。...

黑盒RCE测试 异或测试

前言 了解了漏洞的原理之后就需要知道 他在哪能出现 并且被利用 这个还是很重要的 异或测试 使用异或&#xff08;XOR&#xff09;运算进行加密解密的原理_异或加密-CSDN博客 异或测试是在 白盒内执行的 一个例题看一下 输入什么都是会报错 这种情况就需要使用 异或计…...

kotlin中泛型中in和out的区别

概念含义 in关键字&#xff08;逆变&#xff09; 在Kotlin泛型中&#xff0c;in关键字主要用于定义逆变&#xff08;Contravariance&#xff09;。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说&#xff0c;就是对于类型A和B&#xff0c;如果A是B的子类型&…...

c# iis 解决跨域问题

该错误是一个典型的跨域问题&#xff0c;说明从 http://www.fuc.com 发起的请求被目标服务器&#xff08;https://aip.baidubce.com&#xff09;拒绝&#xff0c;原因是目标服务器未返回正确的 AccessControlAllowOrigin 响应头。 解决方法 1. 了解问题的本质 CORS&#xff08…...

MySQL版本对应的mysql-connector-java版本下载地址

MySQL版本mysql-connector-java版本mysql-connector-java下载地址MySQL安装版下载地址MySQL免安装版下载地址5.1.x5.1.xmysql-connector-java 5.1.xMySQL Installer 5.1.xMySQL Community Server 5.1.x5.5.x5.1.x, 5.5.x mysql-connector-java 5.1.x, mysql-connector-java 5.5…...

【读书笔记】《论语别裁》爱与罪

一、内容摘要 《论语别裁》第01章讨论了孔子关于孝悌的思想&#xff0c;以及其在中国文化中的重要性和复杂性。文中引用了有子的观点&#xff0c;强调孝弟是为人之本。然而&#xff0c;随着历史的发展&#xff0c;孔子的思想也被误解或被用作维护专制统治的工具。通过司马迁的…...

uniApp上传文件踩坑日记

最近在做移动端app&#xff0c;开始接触uniapp。想着直接用PC端的前后端API去做文件上传&#xff0c;但是uniapp的底层把请求拆成了普通请求和文件上传请求&#xff0c;所以不能用一个axios去做所有请求的处理&#xff0c;拆成uni.request和uni.uploadFile去分别处理两种情况。…...

Webhook 是什么?详解其工作原理

在现代技术中&#xff0c;一切都相互连接&#xff0c;每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。 Webhooks 是基于 HTTP 的回调函数&#xff0c;其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲…...

log4j2漏洞复现(CVE-2021-44228)

靶场环境 步骤一&#xff1a;设置出战规则 步骤二&#xff1a;开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三&#xff1a;外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四&#xff1a;构造…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

Java高级 |【实验八】springboot 使用Websocket

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...

JS设计模式(5): 发布订阅模式

解锁JavaScript发布订阅模式&#xff1a;让代码沟通更优雅 在JavaScript的世界里&#xff0c;我们常常会遇到这样的场景&#xff1a;多个模块之间需要相互通信&#xff0c;但是又不想让它们产生过于紧密的耦合。这时候&#xff0c;发布订阅模式就像一位优雅的信使&#xff0c;…...

智能照明系统:具备认知能力的“光神经网络”

智能照明系统是物联网技术与传统照明深度融合的产物&#xff0c;其本质是通过感知环境、解析需求、自主决策的闭环控制&#xff0c;重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成&#xff0c;形成具备认知能力的“光神经网络…...

词法分析和词性标注 自然语言处理

目录 一. 概述 1 不同语言的词法分析 2 英语的形态分析 英语单词的形态还原&#xff08;和正常英语的词法变化一样&#xff09; 1.有规律变化单词的形态还原 ​编辑 2.动词&#xff64;名词&#xff64;形容词&#xff64;副词不规则变化单词的形态还原 3.对于表示年代&…...