Como faço para ensinar alguns palavrões ao bash no Ubuntu?

Como faço para ensinar alguns palavrões ao bash no Ubuntu?

Quando o bash encontra um comando desconhecido (palavra?), ele faz o seguinte:

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

o que eu gostaria de saber é como isso é feito para que eu possa editá-lo ou adicionar algo antes para verificar a palavra desconhecida de um dicionário caseiro que teria pares de frase: resposta que podem então ser enviados para a saída.

Eu sou culpado de não procurar o suficiente por aí .. mas os poucos guias do bash que tentei desenterrar não tinham nada sobre isso. Talvez eu esteja olhando para os lugares errados .. alguma indicação?

E sim, estou fazendo isso, então toda vez que digito wtf quando um programa falha, quero que algo de bom seja jogado de volta para mim ...

Responder1

Procure em seu /etc/bash.bashrcarquivo a command_not_found_handledefinição da função.

Se você quiser remover esse comportamento, coloque isso no seu .bashrc

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

Se você quiser personalizar, você pode fazer

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

Responder2

Essepode ser potencialmente útil...

O pacote command-not-found é o que lhe dá a resposta mágica. Não tenho certeza se é possível personalizá-lo, mas pode valer a pena dar uma olhada.

Outra opção para fazer o que acho que você está tentando fazer seria adicionar um alias ao seu arquivo .bashrc que imprime uma mensagem sempre que você digita 'wtf' ou algo parecido:

alias wtf='echo "chill out man"'

Adicione isso ao seu arquivo ~/.bashrc e faça:source $HOME/.bashrc

Isso apenas imprimiria uma mensagem sempre que você digitasse wtfem seu terminal. Você também pode fazer com que esse alias chame um script que imprima uma mensagem mais detalhada ou algo semelhante. As possibilidades são infinitas!

Responder3

Este comportamento é definido no arquivo de configuração Bash de todo o sistema /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

Para personalizá-lo, basta substituir esta função por sua conta ~/.bashrc:

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

Responder4

@user606723, se você quiser se livrar totalmente desse comportamento:

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

Se isso não funcionar, tente isto:

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

Se você quiser recuperar o comportamento:

sudo apt-get install command-not-found

informação relacionada