背景知识
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需要特殊处理?和的情况

整体代码
