在 Golang 中构建一个交互式 shell

主要观点:Go 适合构建命令行应用,如世界上第一个版本控制的 SQL 数据库 Dolt,其自带命令行解析器但可选择其他工具。同时介绍了用于构建交互式 shell 的最佳工具[abiosoft/ishell],包括预定义命令和自由形式模式,还讲解了如何启动不同模式的 shell、中断执行、添加 shell 历史和 tab 补全等功能。
关键信息:

  • 可选择的工具:[spf13/cobra]可从简单文本命令格式生成代码及生成 shell 补全;[charmbracelet/gum]是生成时尚命令行提示符的工具;[alecthomas/kingpin]是构建命令行应用的库。
  • [abiosoft/ishell]的两种模式:预定义命令模式(每个命令有不同处理程序)和自由形式模式(类似 REPL,读取输入直到分隔符)。
  • 启动 shell 的方法:预定义命令模式需选择配置选项创建 shell 并添加命令后运行;自由形式模式需创建特定配置的 shell 并设置处理函数运行。
  • 中断执行的方式:安装 EOF 处理程序(用户输入结束或发送 EOF 字符)、中断处理程序(处理 SIGINT 信号)、设置退出关键字(自由形式 shell 遇到退出关键字自动退出)。
  • 添加 shell 历史和 tab 补全:历史支持通过提供历史文件路径并在每个命令后更新实现,tab 补全可实现自定义补全功能。
    重要细节:
  • Dolt SQL shell 的示例展示了其欢迎消息、提示符、退出方式及颜色使用等。
  • 对于自由形式模式的 SQL shell 处理,通过创建新上下文处理用户中断查询。
  • 自定义 tab 补全功能根据输入判断是 SQL 关键字还是模式元素进行补全。
    结论:[abiosoft/ishell]是 Go 中构建交互式 shell 的优秀工具,虽不再活跃开发但稳定可用,有问题可在 Discord 上交流。
阅读 31
0 条评论