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

【Linux】—简单实现一个shell(myshell)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦!
本文由:残念ing原创CSDN首发,如需要转载请通知
个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:[残念ing 的【Linux】系列专栏——CSDN博客]
请添加图片描述

实现一个自己的shell

  • 1 步骤简化
    • 1. 获取并且打印命令行提示符
    • 2. 获取用户命令
    • 3. 分析命令(解析命令)
    • 4. 执行命令
    • 5 补充:
      • 5.1 解决需要shell自己执行的内建命令
      • 5.2 环境变量是需要自己去维护的,所以获取当前的路径不能去环境变量里面获取,要直接从系统里面获取
      • 5.3 作为一个shell,获取环境变量应该从系统的配置类,我们几天就直接从父shell中获取环境变量
      • 怎么保证接下来我们的子进程使用myshell的环境变量
  • 总结:

1 步骤简化

在这里插入图片描述

1. 获取并且打印命令行提示符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. 获取用户命令

根据输入流获取字符串函数接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 分析命令(解析命令)

在这里插入图片描述
将字符串分离开的接口 ,当切成功了后返回地址,失败后返回null
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

补充:为了让其更好看增加
在这里插入图片描述

4. 执行命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5 补充:

5.1 解决需要shell自己执行的内建命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 环境变量是需要自己去维护的,所以获取当前的路径不能去环境变量里面获取,要直接从系统里面获取

获取系统的当前路径
更新环境变量
定义一个环境变量的pwd数组
在这里插入图片描述
在这里插入图片描述

5.3 作为一个shell,获取环境变量应该从系统的配置类,我们几天就直接从父shell中获取环境变量

在这里插入图片描述
在这里插入图片描述

怎么保证接下来我们的子进程使用myshell的环境变量

![](https://i-blog.csdnimg.cn/direct/c9210be00587444a8572f42ef3f4b195.png)

在这里插入图片描述
结果:在这里插入图片描述
在这里插入图片描述

总结:

shell本质上就是一个进程,所谓的命令行参数,环境变量,就是shell内部的表(指针数据组),如果是表的话可以通过(env、expect…)这些命令会围绕着这张表来让shell来自主定义与维护这张表


http://www.kler.cn/a/441198.html

相关文章:

  • 《深度揭秘:TPU张量计算架构如何重塑深度学习运算》
  • Flink中的时间和窗口
  • 力扣【416. 分割等和子集】详细Java题解(背包问题)
  • DeepSeek模型:开启人工智能的新篇章
  • Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`
  • Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手
  • 快速掌握源码部署Filebeat
  • 浅谈基于单片机的计步器设计
  • 架构师之路--springboot核心类SpringApplication方法run的源码启动流程
  • 【华为OD机试真题】【2024年E卷】数值同化-队列BFS(C++/Java/Python)
  • 网络安全考题
  • 禁用硬件合成 (Hardware Composer, HWC)
  • ChatGPT搜索全新升级,向全体用户开放,近屿智能助力AI行业发展
  • Linux:入门篇——万字长篇解析
  • 生活小妙招之UE CaptureRT改
  • Qt编译MySQL数据库驱动
  • Linux 各发行版安装 ping 命令指南
  • 解决Windows Server环境下PPTX转PDF时WebP格式图片缺失
  • 程序设计考题汇总(四:SQL练习)
  • Pytorch | 从零构建GoogleNet对CIFAR10进行分类
  • 【Linux课程学习】:第二十一弹---深入理解信号(中断,信号,kill,abort,raise,larm函数)
  • Linux学习笔记思维导图(系统调用+网络编程)
  • 信息安全实训室网络攻防靶场实战核心平台解决方案
  • 【集成部署打包】vue3+django集成部署打包成exe 文件
  • android、flutter离线推送插件,支持oppo、vivo、小米、华为
  • Tomcat HTTPS配置、域名解析及Java WAR包打包