¿Cómo enseño bash en Ubuntu algunas palabras de maldición?

21

Cuando bash encuentra un comando desconocido (¿palabra?) hace esto:

The program 'hello' can be found in the following packages:
 * hello
 * hello-debhelper
Try: sudo apt-get install <selected package>

lo que me gustaría saber es cómo se hace esto para poder editarlo o agregar algo antes para verificar la palabra desconocida de un diccionario nacional, que tendría una frase: pares de respuestas que luego pueden enviarse a la salida.

Soy culpable de no buscar lo suficiente ... pero los pocos guías de ataque que intenté desenterrar no tenían nada de esto. Tal vez estoy buscando en los lugares equivocados ... ¿Alguna sugerencia?

Y sí, estoy haciendo esto, así que cada vez que escribo wtf cuando falla un programa, quiero que me devuelvan algo bueno ...

    
pregunta NitinAb 28.10.2011 - 17:11

4 respuestas

21

Busque en su /etc/bash.bashrc la definición de la función command_not_found_handle .

Si quieres eliminar ese comportamiento, ponlo en tu .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Si desea personalizar, puede hacer

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "() $(declare -f  | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
    
respondido por el glenn jackman 28.10.2011 - 17:56
4

Esto podría ser potencialmente útil ...

El paquete de comando no encontrado es lo que le da la respuesta mágica. No estoy seguro de si es posible personalizarlo, pero valdría la pena echarle un vistazo.

Otra opción para hacer lo que creo que lo que intenta hacer sería agregar un alias a su archivo .bashrc que imprime un mensaje cada vez que escribe 'wtf' o algo así:

alias wtf='echo "chill out man"'

Agregue esto a su archivo ~ / .bashrc, y luego haga: source $HOME/.bashrc

Esto simplemente imprimirá un mensaje cada vez que escriba wtf en su terminal. También puede hacer que este alias invoque un script que imprima un mensaje más detallado o algo similar. ¡Las posibilidades son infinitas!

    
respondido por el jat255 28.10.2011 - 17:44
3

Este comportamiento se define en el archivo de configuración Bash de todo el sistema, /etc/bash.bashrc :

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/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 -- ""
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- ""
      return $?
    else
      return 127
    fi
  }
fi

Para personalizarlo, simplemente anule esta función en su propio ~/.bashrc :

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
    
respondido por el ændrük 28.10.2011 - 17:57
0

@ user606723, si desea deshacerse de este comportamiento en su totalidad:

sudo apt-get remove command-not-found command-not-found-data 

Si eso no funciona, intente esto:

sudo apt-get purge command-not-found command-not-found-data 

Si desea recuperar el comportamiento:

sudo apt-get install command-not-found
    
respondido por el jat255 28.10.2011 - 17:51

Lea otras preguntas en las etiquetas