De onde vem a mensagem “not found” do Bash?

3

Se eu digitar um comando inválido no Bash, obtenho:

$ asdf
asdf: not found

Fui levado a acreditar que a mensagem "não encontrada" é proveniente de um executável de fallback que o Bash chama quando não consegue encontrar o comando que você digita. Qual é o nome e o caminho deste executável?

    
por Rena 28.03.2011 / 09:07

3 respostas

3

Além da resposta de Rena, sim, é uma função - e você pode substituí-la!

Este link detalha como fazer isso . Fascinante post, na verdade. Apenas a tempo para April Fool! sl comanda alguém?

Generosamente removido do artigo vinculado (para a posteridade) é este snippet de código para colocar essa função em seu .bashrc em uma plataforma openSUSE:

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
}
    
por 28.03.2011 / 21:37
4

É emitido pelo próprio bash . Experimente

strings 'which bash' | fgrep found
    
por 28.03.2011 / 10:35
1

Fiz mais algumas pesquisas e descobri que não é um executável, mas uma função, command_not_found_handle () dentro do Bash.

    
por 28.03.2011 / 20:44

Tags