什么向您显示了您可以安装以获取命令的软件包?

什么向您显示了您可以安装以获取命令的软件包?

我注意到在其他 Ubuntu 机器上,当你没有 Maven 并且尝试安装时,mvn它会告诉你安装mavenmaven2。这不会发生在我的 xfce 上,我该如何启用它?

答案1

这个包被恰当地称为command-not-found。此包的与的集成bash是包本身的一部分bash,除非您修改了/etc/bash.bashrc,否则如果您安装了此包,它应该可以工作。

如果您使用 zsh,则添加到/etc/zshrc

. /etc/zsh_command_not_found

答案2

muru 的回答这个包的名字是正确的command-not-found。它基本上提供了一个实际完成主要工作的python脚本。/usr/lib/command-not-found

但您在 Ubuntu 中收到的消息实际上是由一个利用command-not-found属性的函数定义的。它名为command_not_found_handle,位于 中/etc/bash.bashrc

$ type -a command_not_found_handle 
command_not_found_handle is a function
command_not_found_handle () 
{ 
    if [ -x /usr/lib/command-not-found ]; then
        /usr/lib/command-not-found -- "$1";
        return $?;
    else
        if [ -x /usr/share/command-not-found/command-not-found ]; then
            /usr/share/command-not-found/command-not-found -- "$1";
            return $?;
        else
            printf "%s: command not found\n" "$1" 1>&2;
            return 127;
        fi;
    fi
}

由于上述函数,我们在不同情况下会收到不同的错误消息:

$ svn
The program 'svn' is currently not installed. You can install it by typing:
sudo apt-get install subversion

$ foobar
foobar: command not found

让我们检查 :

$ /usr/lib/command-not-found svn
The program 'svn' is currently not installed. You can install it by typing:
sudo apt-get install subversion

$ /usr/lib/command-not-found foobar
foobar: command not found

由于您没有启用该包,因此您基本上每次command-not-found都满足以下功能片段:command_not_found_handle

printf "%s: command not found\n" "$1" 1>&2;
return 127;

因此你每次都会得到以下信息:

$ svn
svn: command not found

$ foobar
foobar: command not found

简而言之,您可以安装该command-not-found软件包,然后将上面提到的功能(如果尚不存在)添加到文件/etc/bash.bashrc(适用于所有用户)或~/.bashrc(仅适用于您)。

相关内容