No se encontró el comando 'bla', ¿quisiste decir?


7

Entonces, cuando no se encuentra un comando, ¿por qué medios se rellena la lista "quiso decir:"? ¿Qué programa encuentra estos comandos alternativos? ¿Cuál es el significado de: "(principal), (universo) ..."? ¿Puedo cambiar qué programa encuentra estos?


1
¿Está preguntando qué programas ofrecen esta funcionalidad o cuál lo hace en su caso? Si es esto último, proporcionó muy poca información. ¿Qué shell usas para empezar?
techraf

Estoy usando bash pero realmente solo quiero decir en el caso más general. ¿Qué programas proporcionan esto y hay una forma bastante consistente de determinar el programa en la mayoría de los shells?

También depende en gran medida del sabor / distribución de Unix / Linux que esté utilizando en cuanto a cómo se implementa la característica.
Randall

Respuestas:


2

Si miras el contenido /etc/apt/sources.listtendrá el formato

#Archive type  Repository URL                   Distribution Component
 deb           http://archive.ubuntu.com/ubuntu precise      main

Tipo de archivo

La primera palabra en cada línea, deb o deb-src, indica el tipo de archivo. Deb indica que el archivo contiene paquetes binarios (deb), etc.

URL del repositorio

La siguiente entrada en la línea es una URL del repositorio desde el que desea descargar los paquetes.

Distribución

La 'distribución' puede ser el nombre / alias del código de lanzamiento (wheezy, jessie, stretch, sid) o la clase de lanzamiento (oldstable, stable, testing, instable) respectivamente.

¿Cuál es el significado de: "(principal), (universo) ..."?

Componente

main consta de paquetes compatibles con DFSG, los paquetes contrib contienen software compatible con DFSG, pero tienen dependencias que no están en main, no contienen software que no cumple con el DFSG y así sucesivamente. Un consejo: marque una de las URL del repositorio, debe tener una carpeta con el nombre del componente.

Los administradores de paquetes dicen aptque tendrá una base de datos que contiene una lista de todos los paquetes en los repositorios y es lo suficientemente inteligente como para darle sugerencias.

Su administrador de paquetes puede estar en eof dpkg (por ejemplo, Debian, Ubuntu, etc.), apt (por ejemplo, Debian, Ubuntu, etc.), ahora rpm obsoletas (por ejemplo, las versiones anteriores de Redhat y las más nuevas no lo inician por razones de compatibilidad), yum (por ejemplo . Fedora, CentOS), dnf - yum dentrificado (por ejemplo, nuevas versiones de Fedora) y así sucesivamente. Para obtener una lista más completa, consulte esto . Incluso puede ver que hay varios administradores de paquetes en una distribución. Por ejemplo, en Ubuntu, puede ver dpkg que alimenta / etc / apt / sources / list.

Entonces cuando escribes

cleaq

Puede decir

cleaq: no command found. Did you mean clean.

¿por qué medios se rellena la lista "quiso decir:"?

Esto implica una coincidencia de patrones con los paquetes en la base de datos de su administrador de paquetes.

Esta base de datos se actualiza cuando haces un apt-get update

No estoy seguro sobre

¿Puedo cambiar qué programa encuentra estos?

aunque. Creo que esta es una característica que no se puede cambiar. Aunque no estoy tan seguro

Referencia : Debian SourceList


1
@vondirac: Sí sources.list está dentro de /etc/apt. Vea la edición. Bueno, en general, puede decir que su administrador de paquetes mantiene esta lista para usted y su administrador de paquetes puede ser apto (en el caso de Debian, Ubuntu, etc.), rpm (Redhat y sus clones), yum (por ejemplo, Fedora , CentOS) y dnf (Nuevas versiones de Fedora)
sjsam

Puede mejorar esta respuesta con referencia a algunos doco de Ubuntu .
JdeBP

4

Para bash, su comportamiento se rige por la función de shell command_not_found_handle(Ver man bash).

Para ver qué comportamiento define esa función, puede emitir:

declare -p -f command_not_found_handle

Puede cambiar qué programa se utiliza redefiniendo la command_not_found_handlefunción.

En las distribuciones basadas en Debian (incluido Ubuntu), el paquetecommand-not-found se instala comúnmente y está disponible en /usr/lib/command-not-found el enlace:

Sugerir la instalación de paquetes en sesiones bash interactivas

Este paquete instalará el controlador para command_not_found que busca programas que no están instalados actualmente pero que están disponibles en los repositorios.

Ver también:


0

Esta no es una característica estándar de los shells de Linux. Hay al menos dos posibilidades:

  • zsh está manteniendo su propia lista de sugerencias
  • proyecto thefuckofrece otro
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.