Solicite instalar el programa después de "El programa 'x' no está instalado actualmente"

18

Si intenta ejecutar un programa que no está instalado, recibirá un mensaje

The program 'x' is currently not installed. You can install it by typing: 
sudo apt-get install x

y en lugar de ofrecerle instalar el programa por usted, debe escribir el comando real. ¿Cómo se puede cambiar este comportamiento?

Gerhard Burger
fuente

Respuestas:

17

El paquete responsable de este comportamiento es el paquete de comando no encontradoInstalar comando no encontrado , y ya incluye el comportamiento deseado, aunque está deshabilitado de forma predeterminada. Puede habilitarlo agregando la siguiente línea a su~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Ahora el comportamiento se cambia a

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

Nota: Si recibe un mensaje sobre el bloqueo de Python (específicamente AttributeError: 'str' object has no attribute 'decode'), este es el error 1073919 . Ya hay una solución disponible para Raring y Saucy. Alternativamente ( solo usuarios avanzados ), puede cambiar el archivo /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, vea el archivo adjunto al informe de errores para las líneas que deben cambiarse.

Editar: La solución ahora se lanzó en la versión 0.3ubuntu7.1 en Raring (SRU) y para 0.3ubuntu8 en Saucy.

Gerhard Burger
fuente
1

Mi solución es un híbrido entre seguridad y comodidad:

auto-apt comprueba el acceso a los archivos de los programas que se ejecutan en sus entornos, y si un programa intenta acceder a un archivo que se sabe que pertenece a un paquete desinstalado, auto-apt instalará ese paquete usando apt-get. Esta característica requiere apt y sudo para funcionar. También proporciona una base de datos simple para buscar qué paquete contiene un archivo solicitado.

Es un emulador de terminal donde ingresa a un entorno en el que cada acceso al archivo se verifica previamente mediante auto-apt y, si no existe, busca en la base de datos (a la apt-file) y descarga e instala el paquete deseado, luego permite que el programa continúe . Deberías ejecutarlo como root:

sudo auto-apt

Esto es útil en los casos en que está creando un paquete y no está de humor para estar frente a la pantalla buscando cada error de configuración para los encabezados faltantes, etc.

Esto también se puede usar como reemplazo de archivos apt-get + apt-file donde puede instalar programas simplemente diciéndole commandal ejecutarlo.

Debe comprender que no debe dejarlo abierto cuando no se busca su sistema, ya que es casi como si estuviera utilizando el usuario root.

Página de manual : http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt

Braiam
fuente
0

La instalación automática sería una mala idea. Si desea guardar algo de mecanografía, puede usar

sudo apt-get install !!

donde !!será reemplazado por el último comando del historial. Probablemente también podría hacer de esto un alias, pero no sé cómo agregarlo !!sin evaluarlo.

Sin embargo, hay algunas advertencias, como lo mencionaron @ eliah-kagan y @gertvdijk en los comentarios. Algunos programas no tienen el mismo nombre de paquete que el binario que ejecutarías. Además, al pasar argumentos al binario, esto podría generar algunos resultados inesperados.

l3dx
fuente
Claro, sé que mi sugerencia no es una gran solución, pero podría funcionar "lo suficientemente bien" según las necesidades de los usuarios.
l3dx
55
Los nombres de comando (nombre de archivo del binario en el sistema) no son necesariamente los mismos que el nombre del paquete.
gertvdijk
3
l3dx: aunque todavía tengo mis dudas (incluido el punto de @ gertvdijk de que los nombres de paquetes y comandos a menudo son diferentes, así como las preocupaciones sobre los posibles efectos muy negativos de los argumentos adicionales de la línea de comandos pasados ​​al comando original), parece que estás en algo . Después de un poco de prueba, parece que esto funciona mejor en la práctica que (creo) que funciona en teoría. Todavía recomiendo ampliar esta respuesta para aclaraciones, advertencias y quizás para detallar otras opciones. En cualquier caso, había votado negativamente sobre esto, pero he eliminado mi voto negativo.
Eliah Kagan
0

Existen algunos métodos para instalar rápidamente el paquete sugerido:

  • Agregar export COMMAND_NOT_FOUND_INSTALL_PROMPT=1a algún lugar como~/.bashrc

    esta es la forma "más genial", aunque obviamente no es tan segura, pero probablemente el 90% del tiempo provocará un interno "¡Gracias, eso es exactamente lo que quería que hicieras!" respuesta.

    (Un inconveniente personal de este método es que parece que la respuesta es difícil de recordar / buscar, por lo que tiendo a no haberla usado mucho hasta ahora).

  • Si está utilizando la Terminal predeterminada, puede seleccionar rápidamente la línea y hacer clic con el botón central para pegarla directamente en la línea de comando. (Otros terminales o aplicaciones SSH pueden tener diferentes métodos).

    En la práctica, tiendo a encontrar esto lo suficientemente rápido y un poco más difícil de hacer "accidentalmente", y sin requerir ninguna configuración previa, tiendo a hacerlo en su lugar.

  • Sin embargo, hay algo que decir, si puede (o quiere aprender) a escribir rápidamente, para escribir sudo apt install packagenamedirectamente.

    Le ayuda a ejercitar su memoria muscular y también significa que debe leer y escribir el nombre del paquete, lo que significa que es probable que lo recuerde más fácilmente en el futuro. También es un poco más fácil en las versiones más recientes de Ubuntu, porque aptfunciona en lugar de apt-get.

mwfearnley
fuente
1
Probablemente quisiste decir en ~/.bashrclugar de ~/.bash_rc.
edwinksl
Gracias, probablemente estaba pensando .bash_profile.
mwfearnley