Ubuntuでbashに呪いの言葉を教えるにはどうすればよいですか?


21

bashが不明なコマンド(単語?)に遭遇すると、次のようになります。

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

私が知りたいのは、これがどのように行われるかですので、編集するか何かを追加してから、自家製の辞書から未知の単語をクロスチェックして、phrase:replyペアが出力に送信されるようにします。

私はそれについて十分に見ていないことの罪を犯している..しかし、私が掘り出そうと試みたいくつかのbashガイドはこれに関して何も持っていませんでした。多分私は間違った場所を見ています..ポインタ?

そして、はい、私はこれをやっているので、プログラムが失敗したときにwtfを入力するたびに、私は何か素敵なものを私に投げ返したいです...


1
私たちがそれに取り組んでいる間に、どうすればこれを完全に無効にできますか?
-user606723


回答:


21

関数定義/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
}

1
私はこのアプローチが好きです。
アーンドリューク

1
うわー!alias_functionのアイデアが気に入りました:
anishsane

現在の定義を確認する/表示するには、実行しますdeclare -p -f command_not_found_handle
ランドール

4

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

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."
}

0

@ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.