Wie unterrichte ich Bash in Ubuntu einige Schimpfwörter?


21

Wenn bash auf einen unbekannten Befehl (ein Wort?) Stößt, geschieht Folgendes:

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

Was ich wissen möchte, ist, wie das gemacht wird, damit ich es bearbeiten oder etwas hinzufügen kann, um das unbekannte Wort aus einem einheimischen Wörterbuch zu überprüfen, das folgende Formulierung haben würde: Antwortpaare, die dann zur Ausgabe gesendet werden können.

Ich habe die Schuld, nicht genug danach gesucht zu haben. Aber die wenigen Bash-Guides, die ich ausgraben wollte, hatten nichts damit zu tun. Vielleicht suche ich an den falschen Stellen .. irgendwelche Hinweise?

Und ja, ich mache das so, jedes Mal, wenn ich wtf tippe, wenn ein Programm ausfällt, möchte ich, dass mir etwas Schönes zurückgeworfen wird ...


1
Wie können Sie dies deaktivieren, während wir gerade dabei sind?
user606723

2
@ user606723 siehe askubuntu.com/q/72853/6969
Lekensteyn

Ein weiterer nützlicher Link: wiki.ubuntu.com/CommandNotFoundMagic
Glenn Jackman

Antworten:


21

Suchen Sie in Ihrem /etc/bash.bashrcnach der command_not_found_handleFunktionsdefinition.

Wenn Sie dieses Verhalten entfernen möchten, fügen Sie dies in Ihre .bashrc-Datei ein

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

Wenn Sie anpassen möchten, können Sie dies tun

# 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
Ich mag diesen Ansatz.
ændrük

1
Wow! Mir hat die Idee von
alias_function

Gehen Sie wie folgt vor, um die aktuelle Definition declare -p -f command_not_found_handle
Randall,

4

Dies könnte möglicherweise nützlich sein ...

Das Paket Befehl nicht gefunden gibt Ihnen die magische Antwort. Ich bin nicht sicher, ob es möglich ist, es anzupassen, aber es könnte einen Blick wert sein.

Eine andere Möglichkeit, das zu tun, was Sie versuchen, ist, Ihrer .bashrc-Datei einen Alias ​​hinzuzufügen, der eine Nachricht druckt, wenn Sie 'wtf' oder etwas Ähnliches eingeben:

alias wtf='echo "chill out man"'

Fügen Sie dies zu Ihrer ~ / .bashrc-Datei hinzu und führen Sie dann Folgendes aus: source $HOME/.bashrc

Dies würde dann immer dann eine Nachricht ausgeben, wenn Sie wtfin Ihr Terminal tippen . Sie können diesen Alias ​​auch ein Skript aufrufen lassen, das eine detailliertere Nachricht oder ähnliches ausgibt. Die Möglichkeiten sind endlos!


3

Dieses Verhalten ist in der systemweiten Bash-Konfigurationsdatei definiert /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

Um es anzupassen, überschreiben Sie einfach diese Funktion in Ihrem eigenen ~/.bashrc:

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

0

@ user606723, wenn Sie dieses Verhalten vollständig beseitigen möchten:

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

Wenn das nicht funktioniert, versuchen Sie Folgendes:

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

Wenn Sie das Verhalten zurückbekommen möchten:

sudo apt-get install command-not-found
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.