Como posso executar um comando antes do apt-get começar a baixar um pacote?
Eu sei sobre o gancho de pré-chamada do dpkg ( conecte um script ao apt-get ), mas isso parece ser executado após o download.
$ apt-get update
Get: 11 http://security.debian.org/ wheezy/updates/main qemu amd64 1.1.2+dfsg-6a+deb7u7 [115 kB]
Fetched 70.9 MB in 10s (6,776 kB/s)
refreshing freenet index
--2015-05-19 15:55:25-- http://127.0.0.1:8888/freenet:USK@oRy7ltZLJM-w-kcOBdiZS1pAA8P-BxZ3BPiiqkmfk0E,6a1KFG6S-Bwp6E-MplW52iH~Y3La6GigQVQDeMjI6rg,AQACAAE/deb.mempo.org/-42/
O que precisamos é executar um comando antes do download. Mais exatamente: o script deve ser executado após a chamada do apt-get, mas antes do apt-get acessar qualquer recurso online.
Existe algo como um gancho de pré-download?
É importante que a instalação possa ser feita sem a necessidade de substituir o script apt-get (e sem fazer mais nada que possa ser desfeito por uma atualização).
apt-get
que chamaria de realapt-get
. Dependendo do escopo que você deseja, a função pode ser declarada em/etc/profile
ou~/.profile
ou~/.bashrc
.Respostas:
Que tal usar ganchos pré / pós-chamada do apt?
Essencialmente, é semelhante aos ganchos de pré / pós-chamada do dpkg, mas para o apt (que eu suponho que seja realmente o mais importante no seu cenário de uso). AFAIK existem outros, mas eu só usei assim.
Por exemplo
fonte
apt-get update
.Primeiro determine onde o apt-get está usando
whereis apt-get
ouwhich apt-get
; Vou assumir que está em / usr / bin / apt-getEm seguida, crie um arquivo em / usr / local / bin / apt-get com este conteúdo:
agora
chmod +x /usr/local/bin/apt-get
.Isso deve sobreviver a todas as atualizações da distribuição, mas não deve alterar o comportamento do apt-get (além de executar o comando antes de fazer qualquer outra coisa). Como bônus, ele poderia analisar os argumentos da linha de comando para executar apenas o comando quando for realmente necessário.
(Esta resposta baseia-se na resposta de Mohammad Etemaddar , mesclada com o feedback de muru)
fonte
Você pode usar um "alias" no arquivo .bashrc. Por exemplo, coloque isso no seu arquivo .bashrc raiz:
Os argumentos da linha de comando serão adicionados automaticamente ao final do alias.
Apenas substitua
echo blahblah
pelo comando que você precisa.Mas, neste caso, só funciona quando você está executando comandos como root (não sudo).
fonte
alias apt-get='echo blahblah && sudo apt-get'
. Então você só precisa digitar o terminal, por exemplo -apt-get update
semsudo
, e será solicitada uma senha do sudo automaticamente./usr/local/bin
ou~/bin
), porque os aliases não lidam bem com argumentos.Primeiro determine onde o apt-get está usando
whereis apt-get
; Vou assumir que está em / usr / bin / apt-getcomo Muru diz: Você pode criar um script chamado
apt-get
em/usr/local/bin/
que é antes/usr/bin
no Debian e Ubuntu$PATH
. Em seguida, coloque o seguinte código nele (/usr/local/bin/apt-get
):Muru Obrigado pela oferta como comentário.
Outro jeito:
Claro que existe outra maneira que não é melhor que a anterior.
Você pode
mv /usr/bin/apt-get /usr/bin/apt-get2
Em seguida, crie um arquivo em / usr / bin / apt-get com este conteúdo:
agora
chmod +x /usr/bin/apt-get
fonte
$@
faz com que o script funcione com todos os argumentos./usr/local/bin
, que vem antes/usr/bin
no PATH padrão no Debian e Ubuntu.apt-get
executável está localizado em/usr/bin/apt-get
, nãosbin
. (b) Não mexa com os comandos do sistema. Como muru diz, você pode criar uma substituição local/usr/local/bin
, embora mesmo isso não seja uma boa solução.Tente um alias no
.bashrc
arquivo. Funciona apenas quando conectado à conta à qual o arquivo corresponde. A sintaxe de um alias é:alias newcommand='command1; command2; command3'
Portanto, sua linha pode ficar assim:alias apt-get='firstcommand; apt-get'
Ou isto:
alias apt-get='firstcommand && apt-get'
Com o segundo,
apt-get
só será executado sefirstcommand
for bem-sucedido.fonte