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

自制简易SHELL

背景知识

1.首先完成shell提示符编写

在这个环节中,我们调用了getenv来获取环境变量USER和PWD。因为debian版本的环境变量中没有hostname环境变量,我们调用gethostname函数来获取hostname。

2.处理命令行的输入

我们使用fgets来完成一行的输入,当读到\n的时候结束。

我们将最后一个字符也就是\n用\0来替换,防止其打印\n,为后面分割字符串做铺垫。

argc和argv的获取

目标:将刚刚我们从命令行中获取的一段字符,分割成多个命令行参数。

注意此函数是第一次传入一个C字符串作为参数,此后不必传入字符串,并从上次停止的位置继续寻找delimiters中的字符;如果出现就再次截断该字符串。

3.正常命令创建子进程执行

注意我们进程替换的函数选择是从环境变量中寻找,并且命令行参数用数组存放的。

4.内建命令

1.cd命令

作用:切换当前工作目录

选择使用库函数getcwd()来获取当前的路径,这样不需要我们手动计算相对路径。

2.export命令

作用:设置或导出环境变量,使变量在当前 Shell 及其子进程中生效

说明shell把其当作内建命令而不是不同命令

我们直接调用库函数putenv()来向原本的环境变量中新添我们自身导入的环境变量。

但是我们后面再次进行env的时候发现我们导入的环境变量没有了,这是发生了什么?

原因:putenv不会复制输入的字符串,而是将指针插入到environ数组中,调用者必须保证该字符串(新添环境变量)的生命周期持续到程序结束或者后续修改,修改该字符串内容会直接影响环境变量。

Shell本身的环境变量是从哪来的?

当用户登录的时候,shell会读取用户目录下的.bash_profile文件,里面保存了导入环境变量的方式!

我们使用一个全局的二维数组来保存自己设置的环境变量,并且限制只能添加最多32个。

3.echo命令

作用:打印文本或变量的值到终端

echo需要特殊处理$?和$的情况

整体代码

http://www.dtcms.com/a/314715.html

相关文章:

  • 数据结构:单向链表、双向链表
  • Java中给List<T> 对象集合去重
  • 深化中坦经贸合作 谱写东非璀璨新篇!东非商贸物流中心(EACLC)正式启航
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现路口车辆速度的追踪识别(C#代码UI界面版)
  • 通过java将 word(.doc) 转 md
  • Java数组转换为逗号分隔字符串的方法
  • dbeaver导入数据及配置讲解
  • 通过 Flink 和 CDC 从 Oracle 数据库获取增量数据,并将这些增量数据同步到 MySQL 数据库中
  • Go 与 Python 爬虫代码实操对比
  • # 自动定时运行Python爬虫脚本教程(Windows任务计划程序)
  • LED光源模拟太阳光,全新科技照亮未来
  • 解决 GitLab external_url 修改无效的问题:保留数据重新生成配置
  • 一(2)关于单链表中的疑问 head = head->next; 和 head->next = head 的核心区别
  • 张宇高数基础30讲与1000题学习笔记(第4-6章)
  • LeetCode:219.存在重复元素||220.存在重复元素|||
  • SpringDoc OpenAPI 3 和 TestContainers 的 零配置自动化API测试方案,实现从API文档生成
  • 安全策略实验报告
  • ensp防火墙用户认证综合实验
  • AI开灯的几种方法,与物理世界的交互过渡
  • 生成式人工智能展望报告-欧盟-06-深度调研-医疗、教育、网络安全
  • 《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第4篇 | 专题:多址技术——频谱资源“共享”的艺术 (FDMA/TDMA/CDMA)
  • 3.JVM,JRE和JDK的关系是什么
  • 《Python 实用项目与工具制作指南》· 1.1 安装Python
  • Jeston + TensorRT + Realsense D435i + ROS noetic + Yolo11 各版本模型目标检测
  • Go 函数选项模式
  • Nature Commun:电化学可及性新策略!PEDOT限域COF孔道提升铀电沉积效率46倍
  • Sklearn 机器学习 数据聚类 肘部法则选择聚类数目
  • 二叉树的概念以及二叉树的分类,添加,删除
  • 机器学习通关秘籍|Day 02:特征降维、用KNN算法和朴素贝叶斯实现分类
  • MySql的两种安装方式