Deshacerse del "comando no encontrado..."

Deshacerse del "comando no encontrado..."

Cuando escribí mal el comando en la terminal recibí este error:

bash: XX: command not found...

Después de eso, tengo que esperar o usar la interrupción del teclado antes de poder usar el mensaje nuevamente. A veces Shell me ofrece instalar algún comando y eso es bastante molesto.

¿Hay alguna manera de deshacerse de este retraso?

Gracias por las respuestas

Respuesta1

El retraso se debe a una costumbre.controlador de comando no encontradoagregado por su distribución. Por lo general, se agrega en algún lugar del /etc/bash.bashrcarchivo de todo el sistema.

El controlador es solo una función de shell con un nombre específico, por lo que también puede deshabilitarlo o anularlo mediante~/.bashrc(por ejemplo, si no desea cambiar la configuración de todo el sistema).

Si el controlador de la distribución está siendo demasiado lento, simplemente puede eliminar ( unset -f) la función y volver al comportamiento estándar de bash:

unset -f command_not_found_handle

Por otro lado, si no te gusta elmensaje, luego puedes definir tu propia versión del controlador (nuevamente a través de ~/.bashrc):

command_not_found_handle() {
    echo "I don't know what '$1' is." >&2
    return 1
}

Respuesta2

Otro método es desinstalar el paquete que proporciona el ejecutable pk-command-not-found; en mi Rocky Linux 9 command_not_found_handlese ve así:

command_not_found_handle () 
    [[ ! -x '/usr/libexec/pk-command-not-found' ]] && runcnf=0;
        '/usr/libexec/pk-command-not-found' "$@";
            printf 'bash: %scommand not found\n' "${1:+$1: }" 1>&2;

Entonces puedes ver que depende de ese /usr/libexec/pk-command-not-foundejecutable.

En un sistema tipo Red Hat, puede hacer esto para averiguar qué paquete es y desinstalarlo:

# rpm -qf /usr/libexec/pk-command-not-found
PackageKit-command-not-found-1.2.4-2.el9.x86_64
# dnf remove PackageKit-command-not-found

Esto cambia todo el sistema, todos los usuarios se verían afectados.

Ah, y 2>&1es solo la redirección del identificador de archivos bash. Literalmente significa "enviar mi stderr a lo mismo que stdout".

información relacionada