Ubuntu の bash に罵り言葉を教えるためにはどうしたらいいでしょうか?

Ubuntu の bash に罵り言葉を教えるためにはどうしたらいいでしょうか?

bash が未知のコマンド (単語?) に遭遇すると、次の処理が行われます:

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

私が知りたいのは、これをどのように行うのかということです。そうすれば、これを編集したり、その前に何かを追加したりして、出力に送信できるフレーズ:返信のペアを持つ自家製辞書から未知の単語をクロスチェックすることができます。

十分に調べなかったのは残念ですが、私が探し出したいくつかの bash ガイドにはこれに関する情報はありませんでした。間違った場所を調べているのかもしれません。何かヒントはありますか?

はい、私はこれをやっているので、プログラムが失敗したときに「wtf」と入力するたびに、何かいいものが返ってきてほしいと思っています...

答え1

/etc/bash.bashrc関数の定義については、 を参照してくださいcommand_not_found_handle

この動作を削除したい場合は、これを.bashrcに追加します。

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

カスタマイズしたい場合は、

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

答え2

これ潜在的に役に立つかもしれません...

command-not-found パッケージは、魔法の応答を提供します。カスタマイズできるかどうかはわかりませんが、試してみる価値はあるかもしれません。

あなたがしようとしていることを実行する別のオプションとしては、'wtf' などと入力するたびにメッセージを出力するエイリアスを .bashrc ファイルに追加することが考えられます。

alias wtf='echo "chill out man"'

これを ~/.bashrc ファイルに追加して、次を実行します。source $HOME/.bashrc

これにより、ターミナルに入力するたびにメッセージが印刷されますwtf。また、このエイリアスで、より詳細なメッセージなどを出力するスクリプトを呼び出すこともできます。可能性は無限です。

答え3

この動作はシステム全体の 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

カスタマイズするには、この関数を独自にオーバーライドするだけです~/.bashrc

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

答え4

@user606723、この動作を完全になくしたい場合は、次の手順に従ってください。

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

それでもうまくいかない場合は、次のことを試してください。

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

動作を元に戻したい場合は、次の手順を実行します。

sudo apt-get install command-not-found

関連情報