コマンドが見つかりません

コマンドが見つかりません

パラメータやオプションなしで誤ったコマンドを実行すると、私の経験では、次の2種類のメッセージのみが表示されます。

~$ Date
No command 'Date' found, did you mean:
 Command 'yate' from package 'yate' (universe)
 Command 'date' from package 'coreutils' (main)
 Command 'late' from package 'late' (universe)
 Command 'kate' from package 'kate' (universe)
Date: command not found
~$ fjldjflsk
fjldjflsk: command not found
~$

これがどのように機能するかをもっと詳しく知りたいです。具体的には、コマンドを実行する前に、これら2つのメッセージのうちどのメッセージを受け取るかをいつ知ることができますか?この動作を簡単に変更できる環境変数やその他のデバイスはありますか? 2番目のメッセージだけを受け取りたいです。

ベストアンサー1

シェルは、コマンドが見つからなかったときにbash呼び出される関数を呼び出します。command_not_found_handle

この関数は次のように見え、declare -f command_not_found_handle次のようになります(Ubuntuシステムにあります)。

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
}

ご覧のとおり、別の変数を使用してくださいcommand-not-found。また、引用されていない変数の拡張と不要なステートメントを使用しreturnますが、今はそれほど重要ではありません。

この関数によって実行された予測を削除するには、次のように関数を完全に削除できます。

unset -f command_not_found_handle

(これはおそらく最良のオプションです。)または、システムが次のものを使用すると仮定して、関数で使用されている実行可能ファイルを削除できますapt

sudo apt purge command-not-found

(このcommand-not-foundコマンドは少なくともUbuntuと同じ名前のパッケージの一部です。)

この機能の詳細については、マニュアルをcommand_not_found_handle参照してくださいbash

おすすめ記事