Linux-模拟一个简单的shell

news2025/1/12 9:03:19

什么是shell外壳?就是操作系统给我们的一个命令行解释器,在Linux系统中,它的shell叫做bash。

那么bash本质是什么呢?  本质就是一个文件,一个进程。    万物皆文件

每个操作系统的shell都是很复杂的,想要实现成本很大,那么,我们是否可以运用我们已学的进程方面知识来模拟一个简单的shell呢?

 

 

easy_shell

[username@VM-4-2-centos mydir]$ ls -a -l -d
drwxrwxr-x 2 owner group 4096 May 23 11:17 .
[username@VM-4-2-centos mydir]$ 

每次我们输入指令,它都会默认打印[username@主机名 mydir]$ 在前面, 所以我们可以这么写。

1528e6fb3b1f406dac7d8af95e9aa8d6.png

 

 当然,你也可以调用系统接口来输出你的用户名,主机名和所在文件夹。

8e7a6eb819224e0d8980209566054c27.png

 

 现在是否已经初见雏形了呢,那么如何去运行其他的程序呢?我们可以使用进程替换来实现!

按我们之前学的进程替换知识,使用execvp无疑是最合适的,可是他要传一个指针数组,我们的command是一个长字符串,所以我们需要将他解析入一个指针数组内,C语言提供了strtok的接口给我们。

 

358315a8a64f4753b78e7f03b3bcc49a.png

 现在我们来尝试一下,是否已经可以执行我们的程序了!

22a09f714c964185a29517d1ef8af0f8.png

 成功运行完毕!

需要注意的是,如果你不小心输错了内容,需要按住ctrl+删除 来进行删除

 

内建命令

虽然说,我们写的已经可以成功模拟了shell执行某些指令了,但是还是有一些指令会出现一些问题,比如说cd命令

d501626ba6ca4ecd92ae0f30a0c57cc6.png

我们使用pwd指令查看我们目前所在目录,使用cd .. 后本该返回到上级目录,可是为什么没有成功呢?

这是因为,我们执行cd命令,是使用的子进程来执行,我们的shell仍然在它当前的工作目录,所以我们应该怎么办?

像类似于这种需要shell自己来执行的命令,我们称之为内建命令,需要单独处理。

f48fa0eb4c01442f94a56e5a573fec68.png

 

 54a120075fcc4ef888871ba207bbd92a.png

 

3a9d6b0bde354a56826ad7d589bc4999.png

79b711a52d6c473aa77b6b0f3c84cffc.png

 成功返回了上级目录!

 

 

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

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

相关文章

chatgpt赋能Python-python_o_n_

Python O(n)的介绍 Python是世界上最流行的编程语言之一,因为其简单易学的语法,强大的功能和广泛的使用领域。对于程序员来说,时间复杂度是非常重要的一个概念。它用来描述一个算法在处理输入数据时所需的时间和空间资源。 在计算机科学的算…

CSS中块级元素,行内块元素,行内元素的特点

CSS自学笔记 目录 一、什么是元素显示模式 二、CSS的元素显示模式 1.块元素 2.行内元素 3.行内块元素 前言 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。 HTML 元素一般分为块元素和行内元素两种类型…

220v转15v芯片-220v转15v用什么芯片?

FET开关,具有高效率和稳定性。 Q:为什么需要将220v转换为15v? A:在家庭电器和电子设备中,很多电路需要低电压直流电源供电。而家庭供电一般为220v交流电,需要经过转换才能得到所需的低电压直流电源。 Q&…

错题记录—哪个类用到了解决哈希冲突的开放定址法,MYSQL实现主从复制的日志是哪种,Java对象的初始化方式有

解决哈希冲突(四种方法): 1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。 (1)线性探测法 (2)平方探测法(二次探测) 2、再哈…

题解2023.5.23(欧拉筛)

C.Hossamand Trainees 欧拉筛,预处理先筛出质数&#xff0c;分解质因数对于出现两次及以上的输出yes 我们需要筛出根号(1e9)以内的所有质数&#xff0c;根据质数定理&#xff0c;大约有4e^3个质数&#xff0c; 时间复杂度分析&#xff1a;le5*4e34e8 #include<bits/stdc.…

Python 3.10.11 liunx系统安装

官网下载 https://www.python.org/downloads/source/ 将tar包上传服务器安装 安装基础功能软件 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 解压安装 tar -z…

chatgpt赋能Python-python_noob

Python for Beginners: An Introduction to the World’s Most Popular Programming Language Python is a high-level programming language that has become one of the most popular and widely used languages in the world. It’s simple, easy to read, and has a vast …

chatgpt赋能Python-python_pecan

Python Pecan: 构建Web应用程序的高效框架 Python是一种简单易学、功能强大的编程语言&#xff0c;非常适合Web应用程序的开发。而Pecan则是一个基于Python的高效框架&#xff0c;可以简化Web应用程序的开发过程。本文将介绍Python Pecan框架的优点、使用方法和性能表现。 什…

计算机网络考试多选题汇总Ⅱ(请关注博客在资源文档下载完整答案)

https://cadyin.blog.csdn.nethttps://blog.csdn.net/qq_38639612?spm1010.2135.3001.5421 计算机网络考试多选题汇总 1、在Windows中&#xff0c;任务管理器的作用是() A&#xff0e;终止未响应的应用程序 B&#xff0e;终止进程的运行 C&#xff0e;查看系统当前的信息 …

【新星计划·2023】网络协议———DHCP讲解

前言 在工作中&#xff0c;利用DHCP可以有效的节约IP地址&#xff0c;既保证了网络通信&#xff0c;又提高IP地址的使用率。 一、DHCP是什么&#xff1f; DHCP全称为Dynamic Host Configuration Protocol&#xff0c;是一种网络管理协议&#xff0c;中文含义为“动态主机配置…

node版本引起的一系列问题

1. 安装node node官方地址 下载对应系统zip到对应的文件夹解压 在目录下创建文件夹node_cache 和 node_global 修改 npm 配置&#xff0c;配置 npm 的全局模块的存放路径以及 cache 的路径 //npm config set prefix 文件路径 npm config set prefix D:\software\nodeJs\n…

shell 免交互

文章目录 Here Document 免交互实验多行注释基本命令 实验 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是…

DR2: Diffusion-based Robust Degradation Remover for Blind Face Restoration

DR2: Diffusion-based Robust Degradation Remover for Blind Face Restoration (Paper reading) Zhixin Wang, Shanghai Jiao Tong University, CH, CVPR2023, Cited:0, Code, Paper 1. 前言 传统的盲脸部修复通常使用预定义的退化模型来合成降质的低质量数据进行训练&#…

CodeForces.1810B.糖果.[中等][ifelse选择][注意输出格式]

题目描述&#xff1a; 解题思路&#xff1a; 题目解读&#xff1a; 初始状态只有一个糖果&#xff0c;即x1&#xff0c;给定想要获得的总糖果数y。 只能进行两种操作&#xff0c;分别是做2x-1和2x1。给出从 x1 到 目标数字 y 的操作步数和具体步骤。 示例1 从1到2&#xff…

2023最全CTF入门指南(建议收藏)

目录 一、CTF简介 二、CTF竞赛模式 三、CTF各大题型简介 四、CTF学习路线 4.1、初期 1、htmlcssjs&#xff08;2-3天&#xff09; 2、apachephp &#xff08;4-5天&#xff09; 3、mysql &#xff08;2-3天&#xff09; 4、python (2-3天) 5、burpsuite &#xff08;…

防火墙——iptables防火墙(四表五链、防火墙配置方法、匹配规则详解)

iptables防火墙 一、Linux包过滤防火墙1、Linux防火墙概述2、netfilter3、iptables4、netfilter/iptables关系 二、四表五链1、表链作用2、四表3、五链4、数据包到达防火墙时&#xff0c;规则表之间的优先顺序5、规则链之间的匹配顺序 三、iptables的安装四、iptables防火墙的配…

chatgpt赋能Python-python_nornir

Python Nornir - 让网络自动化更高效 随着网络技术的发展和网络设备的不断增多&#xff0c;网络自动化成为了现代网络管理的必备技能。然而&#xff0c;手动编写和执行网络任务的方式不仅费时费力&#xff0c;也容易出错和难以维护。 Python Nornir 是一个开源的网络自动化框…

Android 事件分发机制

Android 事件分发机制 概述事件分发过程的主要方法&#xff1a; ViewView 事件的分发 dispatchTouchEventView 事件的处理&#xff08;消费&#xff09;onTouchEvent&#xff1a; ViewGroupViewGroup 事件的分发 dispatchTouchEvent 概述 这里的事件指的是 View 对手势的响应&…

chatgpt赋能Python-python_pe

Python PE&#xff08;Python Performance Engineering&#xff09;介绍 Python PE&#xff08;Python Performance Engineering&#xff09;是Python编程的一个方面&#xff0c;旨在提高Python程序的性能和效率。PE的目标是优化Python程序的执行时间、内存占用和资源消耗&…

chatgpt赋能Python-python_nargs

Python nargs 介绍 在 Python 中&#xff0c;nargs 是使用 argparse 模块中用于定义命令行参数的选项之一。通过使用 nargs&#xff0c;我们可以为每个参数指定一个特定的值。它可以接受以下几种不同的值&#xff1a; ‘?’&#xff1a;表示该参数可以有零个或一个值。‘*’…