Skąd pochodzi komunikat „nie znaleziono” Basha?

3

Jeśli wpiszesz nieprawidłowe polecenie w Bash, otrzymam:

$ asdf
asdf: not found

Doprowadzono mnie do przekonania, że ​​komunikat „nie znaleziono” pochodzi z awaryjnego pliku wykonywalnego, który Bash wywołuje, gdy nie może znaleźć wprowadzonego polecenia. Jaka jest nazwa i ścieżka tego pliku wykonywalnego?

Rena
źródło
Nie /bin/bash?
Scott
Nie, bash tak mówi. (Mój nawet sam tak mówi:) bash: asdf: command not found.
MattBianco

Odpowiedzi:

3

W odpowiedzi na odpowiedź Rena, tak, jest to funkcja - i możesz ją zastąpić!

Ten link zawiera szczegółowe informacje, jak to zrobić . Właściwie fascynujący post. W samą porę na prima aprilis! sl komenda ktos?

Hojnie usunięty z powiązanego artykułu (dla potomnych) jest ten fragment kodu po umieszczeniu tej funkcji w Twojej .bashrcplatformie 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
}
Nitrodist
źródło
4

Wydawany jest bashsam. Próbować

strings `which bash` | fgrep found
reinierpost
źródło
1

Wykonałem dalsze kopanie i odkryłem, że nie jest to plik wykonywalny, ale funkcja, polecenie_not_found_handle () w Bash.

Rena
źródło