Complete uma ação sugerida automaticamente no Bash

1

Às vezes, seu prompt bash sugere ações para você.

Como:

The program 'htop' is currently not installed. You can install it by typing:
apt-get install htop

Ou:

the branch has no upstream branch yet, do git push --set-upstream origin branchname

Existe um comando ou atalho ou substituição para fazer diretamente essa ação sugerida, sem copiar ou redigitar o código (como !! é uma substituição para o último comando)?

    
por Tobi 14.03.2016 / 21:10

1 resposta

2

Em primeiro lugar, os exemplos que você deu não são a mesma coisa. No Ubuntu, o Comando não encontrado Magic é explicado aqui . Para adicionar mais detalhes, na verdade é um script Python encontrado em /usr/lib/command-not-found .

Veja um exemplo:

# /usr/lib/command-not-found htop
The program 'htop' is currently not installed. You can install it by typing:
apt-get install htop

Em /etc/bash.bashrc , incluído pelo shell Bash na inicialização, definimos o manipulador de comando não encontrado:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/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/lib/command-not-found -- "$1"
                   return $?
                elif [ -x /usr/share/command-not-found/command-not-found ]; then
                   /usr/share/command-not-found/command-not-found -- "$1"
                   return $?
                else
                   printf "%s: command not found\n" "$1" >&2
                   return 127
                fi
        }
fi

O Bash versão 4+ usa command_not_found_handle como um nome interno para lidar com situações em que um comando não foi encontrado.

There is a new builtin error-handling function named command_not_found_handle.

#!/bin/bash4

command_not_found_handle ()
{ # Accepts implicit parameters.
  echo "The following command is not valid: \""$1\"""
  echo "With the following argument(s): \""$2\"" \""$3\"""   # $4, $5 ...
} # $1, $2, etc. are not explicitly passed to the function.

bad_command arg1 arg2

# The following command is not valid: "bad_command"
# With the following argument(s): "arg1" "arg2"

Portanto, a resposta curta é não, não há como fazer o que você está perguntando, sem analisar a saída e criar algum tipo de nova funcionalidade.

    
por 14.03.2016 / 21:43

Tags