Peça para instalar o programa depois que “o programa 'x' não estiver instalado no momento”


18

Se você tentar executar um programa que não está instalado, você receberá uma mensagem

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

e, em vez de oferecer a instalação do programa, você deve digitar o comando real. Como esse comportamento pode ser alterado?

Respostas:


17

O pacote responsável por esse comportamento é o pacote não encontradoComando de instalação não encontrado e já inclui o comportamento desejado, embora esteja desativado por padrão. Você pode habilitá-lo adicionando a seguinte linha ao seu~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Agora o comportamento foi alterado para

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

Nota: Se você receber uma mensagem sobre o travamento de python (especificamente AttributeError: 'str' object has no attribute 'decode'), este é o bug 1073919 . Uma correção já está disponível para Raring e Saucy. Como alternativa ( somente usuários avançados ), você pode alterar o arquivo /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, consulte o diff anexado ao relatório de erros para as linhas que precisam ser alteradas.

Edit: A correção foi lançada na versão 0.3ubuntu7.1 em Raring (SRU) e para 0.3ubuntu8 em Saucy.


1

Minha solução é um híbrido entre segurança e conforto:

O auto-apt verifica o acesso ao arquivo dos programas em execução em seus ambientes e, se um programa tentar acessar um arquivo que pertence a um pacote desinstalado, o auto-apt instalará esse pacote usando o apt-get. Este recurso requer o apt e o sudo para funcionar. Ele também fornece um banco de dados simples para pesquisar qual pacote contém um arquivo solicitado.

É um emulador de terminal em que você entra em um ambiente em que cada acesso ao arquivo é verificado previamente pelo auto-apt e, se não existe, pesquisa no banco de dados (a la apt-file) e baixa e instala o pacote desejado, permitindo que o programa continue . Você deve executá-lo como root:

sudo auto-apt

Isso é útil nos casos em que você está construindo um pacote e não está disposto a ficar na frente da tela procurando cada erro de configuração para os cabeçalhos ausentes, etc.

Isso também pode ser usado como substituto do apt-get + apt-file, onde você pode instalar programas apenas commandpara executá-lo.

Você deve entender que não deve deixá-lo aberto quando o sistema não é visualizado, pois é quase como se você estivesse usando o usuário root.

Página do manual : http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt


0

A instalação automática seria uma má ideia. Se você deseja salvar algumas digitações, pode usar

sudo apt-get install !!

onde !!será substituído pelo último comando do histórico. Você provavelmente poderia fazer disso um alias também, mas não sei como adicionar !!sem avaliá-lo.

Existem algumas ressalvas, como mencionado por @ eliah-kagan e @gertvdijk nos comentários. Alguns programas não têm o mesmo nome de pacote que o binário que você executaria. Além disso, ao passar argumentos para o binário, isso pode resultar em alguns resultados inesperados.


Claro, sei que minha sugestão não é uma ótima solução, mas pode funcionar "suficientemente bom" com base nas necessidades dos usuários.
L3dx

5
Os nomes de comando (nome do arquivo do binário no sistema) não são necessariamente iguais ao nome do pacote.
gertvdijk

3
l3dx: Embora eu ainda tenha minhas dúvidas (incluindo o argumento de @ gertvdijk de que os nomes de pacotes e comandos geralmente são diferentes, bem como preocupações com possíveis efeitos muito ruins de argumentos adicionais da linha de comando transmitidos ao comando original), parece que você está interessado em algo . Depois de alguns testes, parece que isso funciona melhor na prática do que (eu acho) na teoria. Ainda recomendo expandir esta resposta para esclarecimentos, avisos e talvez para detalhar outras opções. De qualquer forma, eu havia votado com proveito negativo, mas removi meu voto negativo.
Elias Kagan

0

Existem alguns métodos para instalar rapidamente o pacote sugerido:

  • Adicione export COMMAND_NOT_FOUND_INSTALL_PROMPT=1a algum lugar como~/.bashrc

    esse é o jeito "mais legal", embora obviamente não seja tão seguro, mas provavelmente 90% das vezes provocará um "obrigado, é exatamente isso que eu queria que você fizesse!" resposta.

    (Uma desvantagem pessoal desse método é que eu acho a resposta difícil de lembrar / procurar, por isso não costumo usá-la até agora.)

  • Se você estiver usando o Terminal padrão, poderá selecionar rapidamente a linha e clicar com o botão do meio para colá-lo diretamente na linha de comando. (Outros terminais ou aplicativos SSH podem ter métodos diferentes.)

    Na prática, costumo achar isso rápido o suficiente e um pouco mais difícil de fazer "acidentalmente", e sem exigir nenhuma configuração prévia, que costumo fazer isso.

  • Porém, há algo a ser dito - se você pode (ou deseja aprender a) digitar rapidamente - para digitar sudo apt install packagenamediretamente.

    Isso ajuda a exercitar sua memória muscular e também significa que você deve ler e digitar o nome do pacote, o que significa que você provavelmente se lembrará mais facilmente no futuro. Também é um pouco mais fácil nas versões mais recentes do Ubuntu, porque aptfunciona no lugar de apt-get.


11
Você provavelmente quis dizer em ~/.bashrcvez de ~/.bash_rc.
precisa saber é o seguinte

Obrigado, eu provavelmente estava pensando .bash_profile.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.