Як я навчаю баш в Ubuntu деяких проклятих слів?


21

Коли bash наштовхується на невідому команду (слово?), Він робить це:

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

що я хотів би знати, як це робиться, щоб я міг його відредагувати або додати щось до того, щоб перехрестити перевірку невідомого слова із домашнього словника, який би мав фразу: відповіді пар, які потім можуть бути надіслані на вихід.

Я винен, що не шукаю цього для себе .., але в декількох керівниках, які я намагався викопати, нічого на цьому не було. Можливо, я дивлюся в неправильні місця .. якісь покажчики?

І так, я роблю це, тому кожен раз, коли я набираю wtf, коли програма виходить з ладу, я хочу, щоб щось приємне відкинуло на мене ...


1
Поки ми це робимо, як ви взагалі відключите це?
user606723

2
@ user606723 див. askubuntu.com/q/72853/6969
Lekensteyn

Ще одне корисне посилання: wiki.ubuntu.com/CommandNotFoundMagic
glenn jackman

Відповіді:


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
Мені подобається такий підхід.
ændrük

1
Оце Так! Мені сподобалась ідея alias_function :-)
anishsane

Щоб побачити / перевірити поточне визначення, зробіть:declare -p -f command_not_found_handle
Рандалл

4

Це може бути корисно ...

Пакет не знайдених команд - це те, що дає вам магічну відповідь. Я не впевнений, чи можливо це налаштувати, але це, можливо, варто переглянути.

Ще один варіант зробити те, що я думаю, те, що ви намагаєтеся зробити, - це додати псевдонім у файл .bashrc, який друкує повідомлення щоразу, коли ви вводите 'wtf' або щось подібне:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.