我来处理一个新手和线程管理。 我的外壳应该明白PATH
环境变量。 它可以设置和修改。 它运行在两个方面-interactive和批处理模式。 壳牌是能够服用一种以上的工作如ls; PS; WC文件; CAL。 我想我的手脏了的信号太。 所以,我应该处理^ K,^ C为好。
我知道我将不得不使用的高层,叉子和管道,但就是不能上手。
我来处理一个新手和线程管理。 我的外壳应该明白PATH
环境变量。 它可以设置和修改。 它运行在两个方面-interactive和批处理模式。 壳牌是能够服用一种以上的工作如ls; PS; WC文件; CAL。 我想我的手脏了的信号太。 所以,我应该处理^ K,^ C为好。
我知道我将不得不使用的高层,叉子和管道,但就是不能上手。
所有的UNIX外壳都是开源的 - 这样的好地方,开始可能是阅读的代码。
如果您正在寻找关于这个问题的一个很好的入门文章尝试编写自己的shell从Linux公报。
另一个很好的出发点是要看看的源代码, 迷你外壳 ,只是因为它的最小的一个,让您的头一轮。
你的主循环:
fgets(3)
对于一个简单的外壳, readline(3)
用于看上一个) 解析命令,常见的有两种选择。 写一个递归下降语法分析器或使用yacc(1)
以生成一个。 这是一个更容易爆炸了使用初始解析器yacc
,但你可以完全卡住调试它,它真的想成为上下文。 我喜欢递归下降,但几乎每个人都在世界其他更喜欢使用YACC。 (从技术上说, bison
。)如果外壳是真的很简单,就像一个功课外壳,YACC可能是矫枉过正。
要做到词法分析,你也可以推出自己的,或者使用柔性。
您不需要使用任何线程。
许多描述的主要系统调用也实现了一个shell来说明如何和为什么您可能使用的各种呼叫Unix的书籍。 史蒂文斯和Rochkind两个这样的书:
理查德·史蒂文斯,斯蒂芬一的Rago UNIX环境高级编程,第三版
马克ĴRochkind 先进的Unix编程,第二版