在linux中使用一些软件的命令行时,有时会遇到输入不正常的情况:方向键用不了,直接按方向键会出现一堆字符,退格也是,要按住ctrl
才能正常退格,home
和end
键也不能正常用,等等。
比如在新装的系统中(无论是debian
系还是rh
系),自带的python2
虽然正常,但如果自己编译装一个python3
,进命令行一般就会出现这种情况。google一下可以知道,只需要装好readline-devel
后再重新编译安装python3
,就会正常。
这里涉及到linux的包readline
和readline-devel
。
关于包xx
和xx-devel
的区别,摘一段网上的关于openssl
的说明为例子:
Redhat在封装openssl的时候,把openssl分成了几个部分,执行码部分就是 openssl-1.0.0-27.el6.x86_64 这种包。openssl-devel-1.0.0-27.el6.x86_64 这个就是包含了头文件,头文件参考,某些库文件等跟开发相关的东西
因此可以把xx-devel
理解为库文件。在debian
系中好像也有的名称是xx-dev
。
readline
是一个这样的东西:
The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.
划重点:edit command lines as they are typed in
……
当前官网最新版本是7.0,一般的软件源都是比较旧的,但够用了。要安装直接yum install readline
readline(-devel)
是可以支持大部分linux软件的命令行输入的,实际上它支持的除了刚才说到的python
,还包括bash
本身,还有ftp
等,但有些Low一点的软件,可能就支持不了。还有比如你参与开发的工程中,有些组件是别人编译好的可执行文件(比如公司自己修改过代码的sqlite),然后这个组件恰好就有这个问题,而平时使用不大可能自己去重新编译。
这种时候有一个更强大的软件,rlwrap
,它是通过包装命令行的方式,无视了软件本身。
用法即rlrwap 原本命令
,比如: rlwrap sqlite3 xx.sqlite3
, rlwrap python
github
传送门:https://github.com/hanslub42/...
自己下载编译安装即可,首先当然,这个包依赖gcc
,没安装的话在检查环境./configure
时就会报错,yum install gcc
安装gcc。
然后它还依赖上述的库文件readline-devel
,缺少的话检查环境时最后会提示You need the GNU readline library(ftp://ftp.gnu.org/gnu/readline/ ) to build
。
yum install readline-devel
安装好库文件,接下来可以正常编译安装rlwrap
了。
装好后,享受正常的命令行吧。