Skip to content

phantomT/T-Shell

Repository files navigation

T-Shell project

This is a simplified version of shell on Linux.

这是一个非常简易的shell,是一个学习用的项目

其中使用flexbison以及语法树构建的代码改自《工程化C》课程源码模板

具体解释与运行结果参见:博客讲解: 简易shell的实现 | 无信号接收版

已经实现功能

  • 内建命令:cd/about/history/exit/quit等,history命令必须带参数执行
  • Program指令:ls/pwd/cat/grep等在PATH中的程序
  • ;分段的多命令执行
  • <, >, >>输入输出重定向
  • |管道
  • &后台运行
  • 捕获INTSTOP信号(Ctrl+C/Z)用于终止当前进程。
  • 带颜色的提示符 :)

主要文件

  • main.c主函数
  • main.h主函数的头文件,包含大部分函数声明
  • scanner.l使用flex编写的规则
  • parser.y使用bison的分词器
  • read_cmd包含命令树构建的代码
  • type_prompt.c生成命令行开头的提示符
  • exec_cmd.c包含主函数执行的执行命令函数和具体操作的执行命令函数
  • builtin_cmd.c包含比较复杂的内建命令实现,如cd, history
  • sig_handle.c包含两个简单的信号处理函数

最初始的设计框架

#define TRUE 1
while(TRUE){
    type_prompt();
    read_command(command, parameters);
    if(fork()!=0)
        waitpid(-1,&status,0);
    else
        execve(command,parameters,0);
}

即便把我关在果壳之中,仍然自以为无限空间之王

I could be bounded in a nutshell and count myself a king of infinite space.

About

A simple shell on Linux

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages