Quando você digita um comando que não existe no seu sistema, o bash executa a função command_not_found_handle()
. Nesta função há uma chamada para o script /usr/lib/command-not-found
que imprime mensagens.
Ubuntu 12.04
Meu primeiro palpite para alterar a origem deste script para imprimir mensagens para stdout
em vez de stderr
, mas quando eu estava lendo a fonte do script, descobri que você pode configurá-lo para perguntar se deseja instalar o pacote ausente .
Se você exportar a variável COMMAND_NOT_FOUND_INSTALL_PROMPT
, será solicitado que você instale o pacote ausente:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT=""
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
Do you want to install it? (N/y)y
sudo apt-get install git
[sudo] password for pbm:
Versões mais antigas do Ubuntu
Infelizmente não há COMMAND_NOT_FOUND_INSTALL_PROMPT
, por isso posso encontrar algumas outras opções:
1) Instale o pacote a partir de 12.04 - não deve ser o problema - são apenas alguns scripts em Python, então deve funcionar (não testado!).
2) Altere stderr
para stdout
. Para isso, edite o arquivo /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
e altere stderr
para stdout
nas linhas 237 e 240.
Depois disso, você pode usá-lo desta maneira:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ 'git'
//Installation begins
Se você adicionar a opção -y
ao comando apt-get
nas linhas 237 e 240, também poderá usar a sintaxe !! | sh
.
3) Você também pode modificar este script da linha 242 desta forma:
print >> sys.stderr, _("You can install it by typing:")
f = open("%s/.install-missing" % os.path.expanduser('~'),'w')
print >> sys.stderr, "sudo apt-get install %s" % packages[0][0]
print >> f, "sudo apt-get install %s" % packages[0][0]
f.close()
Desta forma você obterá seu comando no arquivo ~/.install-missing
, então você pode criar um alias:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Se você chamar im
package será instalado.