shell - 对于嵌入式系统的命令行实现,是否有任何好的引用实现?

标签 shell command-line embedded

我知道这不是什么新鲜事,并且已经做过好几次了。但我正在寻找一些引用实现(甚至只是引用设计)作为“最佳实践指南”。我们有一个实时嵌入式环境,其想法是能够使用“调试 shell ”来调用一些命令。示例:“SomeDevice print reg xyz”将请求SomeDevice子系统打印名为xyz的寄存器的值。

最佳答案

我有一小组例程,基本上由 3 个函数和一个查找表组成:

  • 一个收集命令行的函数 - 它很简单;没有命令行历史记录或任何东西,只有退格键或按转义键放弃整个内容的能力。但如果我认为需要更高级的编辑功能,那么在这里添加它们也不会太难。
  • 一个解析一行文本 argc/argv 样式的函数(有关这方面的一些想法,请参阅 Parse string into argv/argc)
  • 一个函数,它接受解析的命令行上的第一个参数,并在命令和函数指针表中查找它,以确定为该命令调用哪个函数,因此命令处理程序只需要匹配原型(prototype):

    int command_handler( int argc, char* argv[]);

然后使用适当的 argc/argv 参数调用该函数。

实际上,查找表还包含指向每个命令的基本帮助文本的指针,如果该命令后面带有“-?”或者 '/?'显示那段帮助文本。另外,如果“help”用于命令,则命令表将被转储(如果将参数传递给“help”命令,则可能仅是一个子集)。

抱歉,我无法发布实际的源代码 - 但它的实现非常简单直接,并且功能足以满足我在嵌入式系统开发中的几乎所有命令行处理需求。

关于shell - 对于嵌入式系统的命令行实现,是否有任何好的引用实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914542/

相关文章:

Linux block 设备模拟 & Fuse

c - STM32 HAL C QuadSPI 显示读写

python - 如何使用idlelib.PyShell在tkinter程序中嵌入解释器?

shell - 如何在 cmd start 中使用引号?

shell - 从文本文件中删除重复的行

linux - 使用 Bash 自动将最后一个命令的输出捕获到变量中?

c - 此字符副本如何工作 : *(*((char**)p))++ = ch; in c

regex - sed:替换包含模式的行

linux - 每次系统启动时更改墙纸的 Shell 脚本

Maven TestNG 项目,将命令行参数传递给 testng.xml 文件