Como eu ensino bash no Ubuntu algumas palavrões?

21

Quando o bash encontra um comando desconhecido (word?) ele faz isso:

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 dele para cruzar a palavra desconhecida de um dicionário que teria frase: pares de resposta que podem ser enviados para a saída.

Eu sou culpado por não procurar o suficiente por aí ... mas os poucos guias que tentei desenterrar não tinham nada a ver com isso. Talvez eu esteja olhando para os lugares errados .. quaisquer ponteiros?

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

    
por NitinAb 28.10.2011 / 19:11

4 respostas

20

Procure na sua /etc/bash.bashrc a definição da função command_not_found_handle .

Se você quiser remover esse comportamento, coloque isso em 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 "() $(declare -f  | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=
  shift
  args=( "[email protected]" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
    
por glenn jackman 28.10.2011 / 19:56
4

Isso pode ser potencialmente útil ...

O pacote de comando não encontrado é 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 eu acho que você está tentando fazer é adicionar um alias ao seu arquivo .bashrc que imprime uma mensagem sempre que você digita 'wtf' ou algo assim:

alias wtf='echo "chill out man"'

Adicione isto ao seu arquivo ~ / .bashrc, e então faça: source $HOME/.bashrc

Isso apenas imprimirá uma mensagem sempre que você digitar wtf no seu terminal. Você também pode fazer esse apelido chamar um script que imprima uma mensagem mais detalhada ou algo semelhante. As possibilidades são infinitas!

    
por jat255 28.10.2011 / 19:44
3

Esse comportamento é definido no arquivo de configuração Bash do 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 -- ""
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- ""
      return $?
    else
      return 127
    fi
  }
fi

Para personalizá-lo, basta substituir essa função em seu próprio ~/.bashrc :

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
    
por ændrük 28.10.2011 / 19:57
0

@ user606723, se você quiser se livrar desse comportamento na sua totalidade:

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

Se isso não funcionar, tente o seguinte:

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

Se você quiser recuperar o comportamento:

sudo apt-get install command-not-found
    
por jat255 28.10.2011 / 19:51

Tags