第七章项目Myshell
在写Myshell的时候,其实刚开始很多都不会,但是看着书上的解释,同时网上查阅资料,最重要的是问学长如何编写,慢慢的编写myshell也快了起来,虽然有很多的错误和bug,但是大部分在后面都等到了解决。
下面是一些我自己在写myshell的时候遇到的坑点:
1.首先是命令行参数的解析,这是一开始就容易错的地方,也让我花费了很多时间。
2.readline
库函数,在使用的时候按下删除健就把一行都删除掉了,我的myshell前面的提示符也都一起删除掉了,我解决的方法是在readline
函数调用的时候,在里面加入了一个字符。
3.cd
命令实现的时候,一开始我是在子进程中实现cd
命令,但是程序执行的时候使用cd
命令的时候,程序没有报错也正常执行,但是在使用pwd
查看当前工作目录的时候却发现,当前工作目录还是没有改变。最后在父进程改变工作目录后,程序的工作目录才发生改变。
4.追加重定向实现的时候,如果文件不存在应该新建,还有就是文件权限的问题。
5execvp
执行命令是遇到NULL的时候结束执行,这个也是一个坑点,比如>>
解析的时候就把它在字符串数组里面变为NULL
然后调用execvp
就可以正常执行,否则会把>>
也识别成文件名。
6.cd
是内置命令,所以应该另外处理,调用execvp
会导致报错。
7.添加环境变量的时候直接添加到/home
下的.bashrc
文件中就可以了。
8.还有就是如何Ctrl+c
杀不掉myshell进程,可以新建一个空函数,然后用函数signal(SIGINT,函数名)就可以实现。
以上就是我在实现myshell的时候遇到的一些坑点。源码也上传到github。
这次myshell也让我知道了,系统的myshell这么完全的功能背后是多少大师的心血。