Bash 的“未找到”消息从何而来?

Bash 的“未找到”消息从何而来?

如果我在 Bash 中输入无效命令,我会得到:

$ asdf
asdf: not found

我一直认为“未找到”消息来自 Bash 在找不到您输入的命令时调用的后备可执行文件。这个可执行文件的名称和路径是什么?

答案1

按照 Rena 的回答,是的,这是一个功能——你也可以替换它!

此链接详细说明了如何操作。事实上,这篇文章很有趣。正好赶上愚人节!斯洛文尼亚命令任何人?

从链接文章中摘录的(供后人参考)这段代码片段是关于如何在.bashrcopenSUSE 平台上放置此功能:

command_not_found_handle() {

    export TEXTDOMAIN=command-not-found

    local cmd state rest
    local -i pid ppid pgrp session tty_nr tpgid

    # do not run when inside Midnight Commander or within a Pipe
    if test -n "$MC_SID" -o ! -t 1 ; then
        echo $"$1: command not found"
        return 127
    fi

    # do not run when within a subshell
    read pid cmd state ppid pgrp session tty_nr tpgid rest  < /proc/self/stat
    if test $$ -eq $tpgid ; then
        echo "$1: command not found"
        return 127
    fi

    # test for /usr/sbin and /sbin
    if test -x "/usr/sbin/$1" -o -x "/sbin/$1" ; then
        if test -x "/usr/sbin/$1" ; then prefix='/usr' ; else prefix='' ; fi
        echo $"Absolute path to '$1' is '$prefix/sbin/$1', so running it may require superuser privileges (eg. root)."
        return 127
    fi

    if test -n "$COMMAND_NOT_FOUND_AUTO" ; then
        # call command-not-found directly
        test -x /usr/bin/python && test -x /usr/bin/command-not-found && /usr/bin/python /usr/bin/command-not-found "$1" zypp
    else
        # print only info about command-not-found
        echo -e $"If '$1' is not a typo you can use command-not-found to lookup the package that contains it, like this:\n    cnf $1"
    fi

    return 127
}

答案2

它是bash自己发出的。试试

strings `which bash` | fgrep found

答案3

经过进一步挖掘,发现它不是一个可执行文件,而是一个函数,Bash 中的 command_not_found_handle()。

相关内容