当您键入系统中不存在的命令时,bash运行功能command_not_found_handle()
。在此功能中,有一个调用/usr/lib/command-not-found
脚本来打印消息。
Ubuntu 12.04
我的第一个猜测是更改此脚本的源以stdout
改为向其中打印消息stderr
,但是当我阅读脚本的源时,我发现可以将其配置为仅询问您是否要安装缺少的软件包。
如果导出变量COMMAND_NOT_FOUND_INSTALL_PROMPT
,将要求您安装缺少的软件包:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT=""
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
Do you want to install it? (N/y)y
sudo apt-get install git
[sudo] password for pbm:
旧版本的Ubuntu
不幸的是没有,COMMAND_NOT_FOUND_INSTALL_PROMPT
所以我可以找到其他几种选择:
1)从12.04开始安装软件包-这应该不是问题-它只是Python中的少数几个脚本,因此应该可以正常工作(未经测试!)。
2)更改stderr
为stdout
。为此,请编辑文件/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
并更改stderr
为stdout
第237和240行。
之后,您可以通过以下方式使用它:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ `git`
//Installation begins
如果您在237和240行中-y
向apt-get
命令添加选项,则还可以使用语法!! | sh
。
3)您也可以按照以下方式从第242行修改此脚本:
print >> sys.stderr, _("You can install it by typing:")
f = open("%s/.install-missing" % os.path.expanduser('~'),'w')
print >> sys.stderr, "sudo apt-get install %s" % packages[0][0]
print >> f, "sudo apt-get install %s" % packages[0][0]
f.close()
这样,您将在file中获取命令~/.install-missing
,因此可以创建别名:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
如果您致电,im
将安装软件包。
/usr/lib/command-not-found
但没有提及COMMAND_NOT_FOUND_INSTALL_PROMPT
-思想?