如何在C中实现自己的基本unix shell?

Ale*_*der 23 c unix shell command-line interpreter

我是流程和线程管理的新手.我的Shell应该了解PATH环境变量.它可以设置和修改.它以两种方式运行 - 交互式和批处理模式.Shell能够执行多个作业,如ls; ps; wc file; cal.我也想弄清信号.所以我也应该处理^ K,^ c.

我知道我将不得不使用高管,叉子和管道但是无法上手.

Sup*_*tux 14

所有的unix shell都是开源的 - 所以一个好的起点可能就是阅读代码.

如果您正在寻找关于该主题的优秀入门文章,请尝试从Linux公报中编写自己的外壳.

另一个好的起点是看看迷你shell的源代码,因为它是最小的一个让你的头脑.


Dig*_*oss 8

你的主循环是:

  • 读一行(fgets(3)用于简单的shell,readline(3)用于花哨的一行)
  • 解析命令
  • fork并执行管道

要解析命令,有两种常见的选择.编写递归下降解析器或用于yacc(1)生成一个.使用初始解析器很容易yacc,但是你完全可以调试它并且它真的想要无上下文.我更喜欢递归下降,但世界上其他所有人都喜欢使用yacc.(技术上,bison.)如果外壳真的很简单,就像一个作业外壳,yacc可能有点矫枉过正.

要进行词法分析,您也可以自己动手或使用flex.

您不需要使用任何线程.

  • 我建议在任何情况下使用`readline()` - 只要你必须使用所述shell,它将使你的生活变得无比轻松.但是在yacc/bison陷入困境的+1.好的工具,但简化是一项艰巨的任务. (3认同)