Jak nauczyć bash w Ubuntu kilku przekleństw?

21

Kiedy bash napotka nieznane polecenie (słowo?), Robi to:

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

Chciałbym wiedzieć, jak to się robi, aby móc go edytować lub dodać coś, aby sprawdzić krzyżowo nieznane słowo z rodzimego słownika, który miałby frazę: pary odpowiedzi, które można następnie wysłać na wyjście.

Jestem winny, że nie rozglądałem się wystarczająco… ale kilka przewodników po bash nie próbowałem tego znaleźć. Może patrzę w niewłaściwe miejsca ... jakieś wskazówki?

I tak, robię to, więc za każdym razem, gdy piszę wtf, gdy jakiś program się nie powiedzie, chcę, aby rzucono mi coś miłego ...

NitinAb
źródło
1
Skoro już nad tym pracujemy, jak to całkowicie wyłączyć?
user606723,
2
@ user606723 patrz askubuntu.com/q/72853/6969
Lekensteyn
Kolejny przydatny link: wiki.ubuntu.com/CommandNotFoundMagic
glenn jackman

Odpowiedzi:

21

Look In Your /etc/bash.bashrcdo command_not_found_handledefinicji funkcji.

Jeśli chcesz usunąć to zachowanie, umieść to w swoim .bashrc

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

Jeśli chcesz dostosować, możesz to zrobić

# 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
}
Glenn Jackman
źródło
1
Lubię to podejście.
ændrük
1
łał! Podobał mi się pomysł funkcji alias :-)
anishsane
Aby zobaczyć / sprawdzić aktualną definicję, wykonaj:declare -p -f command_not_found_handle
Randall
4

Może to być potencjalnie przydatne ...

Pakiet „nie znaleziono komendy” daje magiczną odpowiedź. Nie jestem pewien, czy można to dostosować, ale warto to sprawdzić.

Inną opcją zrobienia tego, co moim zdaniem jest to, co próbujesz zrobić, byłoby dodanie aliasu do pliku .bashrc, który drukuje wiadomość za każdym razem, gdy wpiszesz „wtf” lub coś takiego:

alias wtf='echo "chill out man"'

Dodaj to do pliku ~ / .bashrc, a następnie wykonaj: source $HOME/.bashrc

Spowoduje to po prostu wydrukowanie wiadomości za każdym razem, gdy wpiszesz wtfw terminal. Możesz także wywołać ten alias jako skrypt, który drukuje bardziej szczegółową wiadomość lub coś podobnego. Możliwości są nieskończone!

jat255
źródło
3

To zachowanie jest zdefiniowane w ogólnosystemowym pliku konfiguracyjnym Bash /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

Aby go dostosować, po prostu zastąp tę funkcję we własnym zakresie ~/.bashrc:

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
ændrük
źródło
0

@ user606723, jeśli chcesz pozbyć się tego zachowania w całości:

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

Jeśli to nie działa, spróbuj tego:

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

Jeśli chcesz odzyskać to zachowanie:

sudo apt-get install command-not-found
jat255
źródło