我是一个新手处理和线程pipe理。 我的shell应该理解PATH
环境variables。 它可以被设置和修改。 它以两种方式运行:交互式和批处理模式。 壳牌能够承担多个工作,比如ls; ps; wc文件; cal。 我也想让信号弄脏信号。 所以我应该处理^ K,^ c。
我知道我将不得不使用高pipe,叉子和pipe道,但不能上手。
所有的unix shell都是开源的 – 所以开始的好地方可能是阅读代码。
如果您正在寻找一篇关于这个主题的优秀文章,请尝试从Linux公报中编写自己的Shell 。
另一个好的起点是看看mini-shell的源代码,只是因为它是最小的一个让你头脑发热。
你的主循环是:
fgets(3)
为一个简单的shell, readline(3)
为一个简单的shell) 为了解析命令,有两个常见的选择。 编写递归下降解析器或使用yacc(1)
生成一个。 用yacc
打开一个初始的解析器会容易yacc
,但是你完全可能会停下来调试它,而且它真的希望没有上下文。 我喜欢递归下降,但世界上其他人更喜欢使用yacc。 (技术上来说, bison
。)如果外壳真的很简单,像一个作业外壳,YACC可能是矫枉过正。
为了做词法分析,你也可以自己编辑或使用flex。
你将不需要使用任何线程。
描述主要系统调用的许多Unix书籍还实现了一个shell来说明如何以及为什么使用各种调用。 史蒂文斯和罗奇金德是两本这样的书:
W Richard Stevens,Stephen A Rago 在Unix环境下的高级编程,3rd Edn
Marc J Rochkind 高级Unix编程,第二版