Come faccio a insegnare a bash in Ubuntu alcune parole maledette?

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 mi piacerebbe sapere è come questo sia fatto in modo che io possa modificarlo o aggiungere qualcosa prima di controllare la parola sconosciuta da un dizionario sviluppato in casa che avrebbe una frase: coppie di risposte che possono poi essere inviate all'output.

Sono colpevole di non averlo visto 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 ributtato ...

    
posta NitinAb 28.10.2011 - 19:11

4 risposte

21

Cerca il /etc/bash.bashrc per la definizione della funzione command_not_found_handle .

Se vuoi rimuovere questo comportamento, inserisci questo 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 "() $(declare -f  | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=
  shift
  args=( "[email protected]" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
    
risposta data glenn jackman 28.10.2011 - 19:56
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 valerne la pena.

Un'altra opzione per fare ciò che penso quello che stai cercando di fare sarebbe 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, e poi fai: source $HOME/.bashrc

Questo dovrebbe quindi stampare un messaggio ogni volta che digiti wtf nel tuo 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!

    
risposta data jat255 28.10.2011 - 19:44
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 -- ""
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- ""
      return $?
    else
      return 127
    fi
  }
fi

Per personalizzarlo, sostituisci semplicemente questa funzione nel tuo ~/.bashrc :

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
    
risposta data ændrük 28.10.2011 - 19:57
0

@ user606723, se vuoi 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 vuoi riprendere il comportamento:

sudo apt-get install command-not-found
    
risposta data jat255 28.10.2011 - 19:51

Leggi altre domande sui tag