我是处理和线程管理的新手。我的Shell应该了解PATH
环境变量。它可以设置和修改。它以两种方式运行 - 交互式和交互式批处理模式。 Shell能够执行多个作业,如ls; ps; wc file; cal。我也想弄清信号。所以我也应该处理^ K,^ c。
我知道我必须使用高管,叉子和管道,但是无法上手。
答案 0 :(得分:14)
所有unix shell都是开源的 - 所以开始的好地方可能是阅读代码。
如果你正在寻找关于这个主题的好文章,请试试Linux公报中的Writing Your Own Shell。
另一个好的起点是看一下mini-shell的源代码,因为它是最小的一个,可以让你满意。
答案 1 :(得分:8)
您的主循环是:
fgets(3)
表示一个简单的shell,readline(3)
表示一个简单的shell)要解析命令,有两种常见的选择。编写递归下降解析器或使用yacc(1)
生成一个。使用yacc
敲出初始解析器要容易得多,但是你完全可以调试它并且它真的想要无上下文。我更喜欢递归下降,但世界上其他所有人都喜欢使用yacc。 (从技术上讲,bison
。)如果shell非常简单,就像一个作业shell,yacc可能有点过分。
要进行词法分析,您也可以自己动手或使用flex。
您不需要使用任何线程。
答案 2 :(得分:4)
许多描述主系统调用的Unix书籍也实现了一个shell来说明如何以及为什么使用各种调用。 Stevens和Rochkind是两本这样的书:
W Richard Stevens,Stephen A Rago Advanced Programming in the Unix Environment, 3rd Edn
Marc J Rochkind Advanced Unix Programming, 2nd Edn