¿Cómo le enseño a bash en Ubuntu algunas malas palabras?

¿Cómo le enseño a bash en Ubuntu algunas malas palabras?

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 local que tendría pares de frase: respuesta que luego se pueden enviar a la salida.

Soy culpable de no buscarlo lo suficiente... pero las pocas guías de bash que intenté desenterrar no tenían nada sobre esto. Tal vez estoy mirando los lugares equivocados... ¿algún consejo?

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

Respuesta1

Busque en su /etc/bash.bashrcla command_not_found_handledefinición de la función.

Si desea eliminar ese comportamiento, coloque esto en su .bashrc

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

Si quieres personalizar, puedes hacerlo.

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

alias_function orig_command_not_found_handle command_not_found_handle 

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

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}

Respuesta2

Estepodría ser potencialmente útil...

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

Otra opción para hacer lo que creo que estás intentando hacer sería agregar un alias a tu archivo .bashrc que imprima un mensaje cada vez que escribas '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 wtfen su terminal. También puedes hacer que este alias llame a un script que imprima un mensaje más detallado o algo similar. ¡Las posibilidades son infinitas!

Respuesta3

Este comportamiento se define en el archivo de configuración de 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 -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

Para personalizarlo, simplemente anule esta función por su cuenta ~/.bashrc:

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}

Respuesta4

@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, prueba esto:

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

Si desea recuperar el comportamiento:

sudo apt-get install command-not-found

información relacionada