配置检测命令是否不存在,建议安装


22

可以将zshshell配置为显示bash命令不存在时显示的内容,类似于以下内容:

kahless:~$ sysv-rc-conf  
The program 'sysv-rc-conf' is currently not installed.  You can install it by typing:  
sudo apt-get install sysv-rc-conf

而不是ZSH提示:

[kahless /home/teward]% sysv-rc-conf  
zsh: command not found: sysv-rc-conf

注意我不想更改提示本身,但是我想要将结果从zsh: command not found更改为bash The program 'progname' is currently not installed. You can install it by typing:或类似的输出。

ZSH有可能吗?

Answers:


22

该功能由包装提供。Ubuntu默认情况下会安装它,并使其默认情况下在bash中处于活动状态,但在zsh中不处于活动状态。只需将此行添加到您的:command-not-found 安装未找到的命令~/.zshrc

. /etc/zsh_command_not_found

此解决方案有效。那么,有没有办法摆脱输出中的一行呢?(请注意,它和输出一样包含在输出中The program 'progname' is currently not installed. You can install it by typing:zsh: command not found: sysv-rc-conf
Thomas Ward

@EvilPhoenix:任何地方都可以做(除了函数内部或其他明显的东西)。我不知道删除zsh: command not found线。
吉尔(Gilles)“所以,别再邪恶了”,

好的,我可能会忽略“找不到命令的部分”。因为建议的安装部分很好,并且由于命令不存在而使它出现,也很容易知道;)
Thomas Ward

到之交command not found消息您可以添加exit在函数结束command_not_found_handler/etc/zsh_command_not_found
jens_bo

4

请注意,如果要在没有/etc/zsh_command_not_found文件的发行版之间共享.zshrc,则可能要添加检查文件是否存在的方法:

[[ -a "/etc/zsh_command_not_found" ]] && . /etc/zsh_command_not_found

另外,如果您使用的是oh-my-zsh,则已经有一个插件,command-not-found您可以将其添加到plugins执行相同操作的变量中。


1

如果您使用的是oh-my-zsh,则可以在其中查找“插件” .zshrc

command-not-found插件添加到要自动加载的插件列表中(默认情况下已安装此插件)。

像这样:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git command-not-found)

0

它的工作方式是通过bash中的command_not_found_handle()函数。bash提供了一个钩子,它基本上是一个找不到命令时调用的函数。Ubuntu的bash实现会捕获它并进行程序包搜索,而Debian的bash不会(与zsh相同)。您可能需要查看zsh的联机帮助页,以查看其功能是否相似。

这是您的入门方法,希望zsh与此相似。

mpandit@mpandit-ubuntu:~$ command_not_found_handle() {echo 'Handler: Command not found!';}
mpandit@mpandit-ubuntu:~$ ddaadada
'Handler: Command not found!
mpandit@mpandit-ubuntu:~$

这在Debian和Ubuntu的bash中没有什么不同。不同之处在于,Ubuntu command-not-found默认安装,而Debian不安装。zsh也已经存在该功能,只是默认情况下未激活它。
吉尔(Gilles)'所以

假定command_not_found不包含在系统中。但是,这不是我想要的。话虽这么说,@ Gilles的答案更像是我所寻找的路线,我只是想弄清楚将其指定的行包括在哪里。
托马斯·沃德

command_not_found_handler在zsh中称为。请参阅zsh.sourceforge.net/Doc/Release/Command-Execution.html
Mikel 2014年

0

另外,如果您不希望zsh 100%的时间都具有此行为,则可以手动执行以下操作:

/usr/lib/command-not-found urxvt

或将命令未找到添加到$ PATH


3
当我问这个问题时,我希望它一直运行:P
Thomas Ward
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.