当你写错命令名时,bash 通常会出现以下情况:
septi@norbert:~$ good
No command 'good' found, did you mean:
Command 'gold' from package 'binutils' (main)
Command 'gmod' from package 'gmod' (universe)
Command 'goo' from package 'goo' (universe)
Command 'god' from package 'god' (universe)
Command 'geod' from package 'proj-bin' (universe)
Command 'gord' from package 'scotch' (universe)
good: command not found
或者有时会这样做:
septi@norbert:~$ nftp
No command 'nftp' found, but there are 23 similar ones
nftp: command not found
有没有办法让 bash 为我显示这 23 个类似的命令?还有,有没有办法显示类似的命令(包括尚未安装的命令),而不是运行应用程序ftp
?
答案1
Bash 使用命令/usr/lib/command-not-found
来查找类似的命令。这又使用了 Python 的CommandNotFound
模块。
您在终端上看到的输出(stderr
在本例中)也是从此模块生成的。此模块的位置是/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py
,在 Ubuntu 14.04 及更高版本上。第 138 行的函数中对类似命令的数量设置了默认限制。CommandNotFound.print_spelling_suggestion(self, word, min_len=3, max_len=15)
您可以将该max_len
值修改为 30(使用sudo nano
或gksudo gedit
编辑此文件)。
答案2
很可能这 23 个“类似”的命令对你来说不会比“goo”、“god”和“gord”有用多少。大多数 bash'ers 用来查找东西的小技巧是使用手册页,因为搜索是基于内容的,而不仅仅是根据名称。例如,尝试
man -k ftp
如果您发现一个可能或有趣的命令,请通过删除 -k 开关来查看手册页本身:
man sftp
man 有它自己的手册页:
man man
现在你知道为什么了,每当你安装一个新程序或应用程序时,它通常也会为你安装一个手册页。
哦,是的,要搜索尚未安装的手册页,您可能喜欢众多在线手册网站之一,例如这个。