Come insegno a bash in Ubuntu alcune parolacce?


21

Quando bash incontra un comando sconosciuto (parola?) Fa questo:

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

quello che vorrei sapere è come farlo in modo da poterlo modificare o aggiungere qualcosa prima di incrociare la parola sconosciuta da un dizionario cresciuto in casa che avrebbe una frase: coppie di risposta che possono quindi essere inviate all'output.

Sono colpevole di non cercarlo abbastanza in giro .. ma le poche guide bash che ho provato a scavare non avevano nulla su questo. Forse sto guardando i posti sbagliati .. qualche suggerimento?

E sì, lo sto facendo così ogni volta che scrivo wtf quando un programma fallisce, voglio qualcosa di carino che mi viene restituito ...


1
Mentre ci siamo, come si disabilita del tutto?
user606723,

2
@utente606723 consultare askubuntu.com/q/72853/6969
Lekensteyn

Risposte:


21

Cerca nella tua /etc/bash.bashrcla command_not_found_handledefinizione della funzione.

Se vuoi rimuovere quel comportamento, inseriscilo nel tuo .bashrc

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

Se vuoi personalizzare, puoi farlo

# 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
}

1
Mi piace questo approccio.
ændrük,

1
Wow! Mi è piaciuta l'idea alias_function :-)
anishsane,

Per vedere / controllare la definizione corrente, fai:declare -p -f command_not_found_handle
Randall,

4

Questo potrebbe essere potenzialmente utile ...

Il pacchetto comando non trovato è ciò che ti dà la risposta magica. Non sono sicuro che sia possibile personalizzarlo, ma potrebbe valere la pena dare un'occhiata.

Un'altra opzione per fare ciò che penso che ciò che stai cercando di fare sarebbe quella di aggiungere un alias al tuo file .bashrc che stampa un messaggio ogni volta che digiti 'wtf' o qualcosa del genere:

alias wtf='echo "chill out man"'

Aggiungi questo al tuo file ~ / .bashrc, quindi fai: source $HOME/.bashrc

Ciò stamperebbe quindi un messaggio ogni volta che si digita wtfnel terminale. Puoi anche fare in modo che questo alias chiami uno script che stampa un messaggio più dettagliato o qualcosa di simile. Le possibilità sono infinite!


3

Questo comportamento è definito nel file di configurazione di Bash a livello di 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

Per personalizzarlo, basta semplicemente ignorare questa funzione ~/.bashrc:

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

0

@ user606723, se si desidera eliminare questo comportamento nella sua interezza:

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

Se non funziona, prova questo:

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

Se si desidera ripristinare il comportamento:

sudo apt-get install command-not-found
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.