如何在bash shell中实现命令建议?

Ket*_*omp 3 bash shell autocorrect search-suggestion

gk@Jarvis:~$ sudi
No command 'sudi' found, did you mean:
Command 'sudo' from package 'sudo-ldap' (universe)
Command 'sudo' from package 'sudo' (main)
sudi: command not found
Run Code Online (Sandbox Code Playgroud)

我目前实施了一个简单的'你的意思是......?' 对于简单的英语单词,其工作原理如下:

  • 如果用户输入'Kack',请检查QWERTY键盘上单词中每个字母表周围的字母,然后逐个替换它们.(例如,这里它们将是J,L,M,I,O代表'K'; Q,W,S,Z,X代表'a'等等)
  • 以最大概率返回单词(如果是这种情况,用户也自己输入单词)作为最可能的单词,基于对文本语料库的训练.

如何在linux命令行中实现代码建议?

ric*_*ici 5

bash没有实现建议逻辑; 它位于一个函数中,定义为bash初始化文件的一部分,它由你的发行版放在那里(Ubuntu/Debian,猜测).

bash提供了实现这样一个函数的机制:当它试图执行一个命令,并且找不到该命令时,它会调用该函数command_not_found_handle(如果已定义).

在我的机器上(Ubuntu变体),该函数定义如下:

$ type 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
}
Run Code Online (Sandbox Code Playgroud)

(并且/usr/lib/command-not-found存在,是可执行的,并且是Python脚本.)