关于命令行独占的应用程序

neotian
  • 17

图片描述

大家好,想问一下独占终端的问题,目前完全没有头绪。
类似于mysql的命令行程序,执行mysql -u root -p 密码,最后就进入了独占于终端的mysql进程里,用golang如何实现,或者c++,python等其他语言是如何做到的?(发现c++和python开发的好多终端工具都有这效果)
说一个大概也是可以的,主要是现在完全没有头绪。先感谢各位大神了

回复
阅读 1.6k
4 个回答
✓ 已被采纳

这个其实是一个c库 readline 实现到,包括bash,ftp,gdb等著名命令行程序均由它提供支持。

这个要做到其实是很简单的,当然要做到精细同样不简单。

mysql客户端(也就是你所说的独占的命令行的典型代表)与类似ls之类的程序比较大的区别就是,mysql客户端的进程是一致存在的,而ls的进程是立马结束的。换句话说,mysql客户端程序是带有上下文(如先输入了use db0;,再输入show tables;,这两条指令之间是有上下文关系的)的,在你输入完一条指令后进程并未退出,它在等待你输入下一条指令。

你所看到的每行起始位置的mysql>,其实是mysql客户端自己向屏幕输出的字符,为的就是模拟shell下的PS1。因此,要做到你所谓的独占的命令行,起码要做到这么两点:

  • 进程不要退出,只有读取到用户输入的exit命令时才能让进程退出。
  • 向屏幕输出PS1,当然这个不是真的PS1,当然内容是什么由你决定。
你知道吗?

宣传栏