# myshell 用户手册 (注:手册使用 markdown 语法标注,使用 markdown 编辑器查看效果更好。) myshell 是由个人独立完成的一个简单的 Shell 实现。 ## 命令提示符 myShell 的提示字符格式为`用户名 当前工作目录 $ `,并且使用 ANSI 标准转义代码在终端显示颜色和标题。 在提示后可以输入命令,按下回车命令执行完成后会重新打印提示并继续接受命令输入。 ## 命令 Shell 命令由以下部分组成: - 命令名称 - 零或多个命令参数 - 零或多个输入/输出重定向 多条命令间可以由以下符号连接: - |:管道 - &:后台执行前一个命令,可以出现在复合命令的最后。 - ||:仅当前一条命令不正确退出时执行下一条命令。 - &&:仅当前一条命令正确退出时执行下一条命令。 - ;:按顺序执行命令。 符号可以将命令名称、参数等拆分,此时命令中的相关空格是可选的。 ## 管道 管道(|)可以将上一条命令的输出作为下一条命令的输入。 例如,`ls|sort`可以将`ls`的结果经过排序后输出。 管道原先标准输入和标准输出的重定向会可以被命令中的输入/输出重定向覆盖,例如 `ls | sort > dir.txt`。 ## 输入/输出重定向 输入/输出重定向是将命令对某个文件描述符的输入/输出操作重定向至文件(暂不支持文件描述符)的功能。 支持的重定向的格式: programname arg1 arg2 < inputfile > outputfile 使用arg1 和arg2 执行程序programname,输入文件流被替换为inputfile,输出文件流被替换为outputfile。 如果输出重定向的符号为 >>,则为追加模式,将输出的内容追加在文件的末尾(如果文件不存在则创建)。 ## 后台执行 默认情况下,Shell 将等待当前命令结束之后,再提示用户输入新的命令。通过在命令末尾加上`&`,可以使得 Shell 不等待此命令执行结束,即提示用户输入新的命令。 ## 内建命令 本 Shell 实现了以下内建命令: - cd:改变当前工作目录到指定目录或家目录。 - exit:退出 Shell。 - pwd:显示当前目录。 - time:显示当前时间。 - fg:将后台的进程转到前台执行。 - jobs:列出后台进行的程序。 - clr:清除屏幕。 - dir:列出指定目录或当前工作目录。 - echo:打印所有命令参数和换行,参数在打印时以空格间隔。 - environ:列出所有环境变量。 - help:打印帮助。 - umask:改变默认文件权限。 - quit:退出 Shell。 - myshell: 从文件执行 shell 程序。 ## 安装 myshell 在开发时使用 CMake 进行构建,因此构建时可以将其作为依赖安装。 使用`cmake . && make`命令进行编译即可。 如果没有安装 CMake,也可以使用 myshell 附带的 Makefile。 使用`make`命令进行编译即可。