¿Cómo soluciono "/usr/bin/python: No existe tal archivo o directorio" al ingresar un comando no válido en bash?

¿Cómo soluciono "/usr/bin/python: No existe tal archivo o directorio" al ingresar un comando no válido en bash?

Acabo de instalar Ubuntu 18.04.4 LTS en Windows en el Subsistema de Windows para Linux (WSL). Cuando ejecuto un comando que no existe en mi terminal bash (por ejemplo, si accidentalmente agrego un s adicional ls), aparece este error:

$ lss
-bash: /usr/bin/python: No such file or directory

El error es correcto, solo tengo instalado python3:

$ ls /usr/bin/python*
/usr/bin/python3           /usr/bin/python3-jsonpatch    /usr/bin/python3-jsonschema  /usr/bin/python3.6m
/usr/bin/python3-jsondiff  /usr/bin/python3-jsonpointer  /usr/bin/python3.6           /usr/bin/python3m

Del uso anterior de Ubuntu, recuerdo que el mensaje debería ser "El programa 'lss' se puede encontrar en los siguientes paquetes:" Ya no necesito ese mensaje y no quiero instalar python2 solo para que funcione. (esta pregunta tiene respuestas para resolver el problema instalando py2).

¿Es posible solucionar este problema sin instalar python2, vincular python 3 como 2 o volverse perfecto y no volver a cometer errores tipográficos?

Idealmente, podría portar el script "el comando no existe" a python3 odesactivarlo por completo.

Respuesta1

Python3 no es un sustituto directo de python2. Necesita una versión Python3 de lss.

Actualizaría lsssi fuera tú. Es un script independiente y la fuente se puede encontrar engithub. 1 es obvio:

print 'Usage:', __file__, '/path/to/dir'

"imprimir" necesita usar "(" y ")" cuando se usa python3. Pondría el script en un archivo llamado lss3o algo así y lo usaría python3 lss3para buscar y corregir errores.

Respuesta2

Resulta que estaba anulando la command_not_found_handlefunción (una función de bash) con algo que llamó pythondirectamente en mi bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
    function command_not_found_handle {
        # check because c-n-f could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

Este código ya no es necesario (¿alguna vez lo fue?) y eliminarlo solucionó mi problema; ahora aparece nuevamente el antiguo resultado "se puede encontrar en los siguientes paquetes".

Para completar: si quisiera omitir el código Python y la salida simple de que el comando no existe, podría poner esto en mi bashrc:

function command_not_found_handle {
    echo Command not found: $1
    return 127
}

información relacionada