Wie kann ich einen Befehl ausführen, bevor apt-get mit dem Herunterladen eines Pakets beginnt?
Ich kenne den dpkg-Pre-Invoke-Hook ( haken Sie ein Skript in apt-get ein ), aber das scheint nach dem Download ausgeführt zu werden.
$ 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/
Wir müssen vor dem Download einen Befehl ausführen . Genauer gesagt: Das Skript muss nach dem Aufruf von apt-get ausgeführt werden, bevor apt-get auf eine Online-Ressource zugreift.
Gibt es so etwas wie einen Pre-Download-Hook?
Es ist wichtig, dass die Installation durchgeführt werden kann, ohne das Skript apt-get ersetzen zu müssen (und ohne etwas anderes zu tun, das durch ein Update rückgängig gemacht werden könnte).
apt-get
die selbst den Real aufruftapt-get
. Abhängig vom gewünschten Bereich kann die Funktion entweder in/etc/profile
oder~/.profile
oder deklariert werden~/.bashrc
.Antworten:
Was ist mit passenden Hooks vor / nach dem Aufruf?
Im Wesentlichen ähnelt es dpkg-Hooks vor / nach dem Aufruf, jedoch für apt (was meiner Meinung nach tatsächlich das wichtigste in Ihrem Verwendungsszenario ist). AFAIK gibt es andere, aber ich habe nur so verwendet.
Z.B
quelle
apt-get update
.Bestimmen Sie zuerst, wo apt-get verwendet wird
whereis apt-get
oderwhich apt-get
; Ich gehe davon aus, dass es in / usr / bin / apt-get istErstellen Sie dann eine Datei in / usr / local / bin / apt-get mit folgendem Inhalt:
jetzt
chmod +x /usr/local/bin/apt-get
.Dies sollte alle Upgrades der Distribution überleben, aber das Verhalten von apt-get nicht ändern (abgesehen davon, dass der Befehl ausgeführt wird, bevor etwas anderes ausgeführt wird). Als Bonus könnte es die Befehlszeilenargumente analysieren, um den Befehl nur auszuführen, wenn er wirklich benötigt wird.
(Diese Antwort baut auf der Antwort von Mohammad Etemaddar auf , die mit dem Feedback von muru zusammengeführt wurde.)
quelle
Sie können einen "Alias" in der .bashrc-Datei verwenden. Fügen Sie dies beispielsweise in Ihre .bashrc-Stammdatei ein:
Befehlszeilenargumente werden automatisch am Ende des Alias hinzugefügt.
Ersetzen
echo blahblah
Sie einfach durch den Befehl, den Sie benötigen.In diesem Fall funktioniert dies jedoch nur, wenn Sie Befehle als root ausführen (nicht als sudo).
quelle
alias apt-get='echo blahblah && sudo apt-get'
. Dann müssen Sie zum Beispiel nur noch das Terminal eingeben -apt-get update
ohnesudo
, und Sie werden automatisch nach einem Sudo-Passwort gefragt./usr/local/bin
oder~/bin
) zu verwenden, da Aliase Argumente nicht gut verarbeiten.Bestimmen Sie zuerst, wo apt-get verwendet wird
whereis apt-get
. Ich gehe davon aus, dass es in / usr / bin / apt-get istwie muru sagt, können Sie ein Skript erstellen Namen
apt-get
in/usr/local/bin/
dem vor ist/usr/bin
in Debian und Ubuntu$PATH
. Fügen Sie dann den folgenden Code ein (/usr/local/bin/apt-get
):Danke muru für das Angebot als Kommentar.
Andere Weise:
Natürlich gibt es einen anderen Weg, der nicht besser ist als der vorherige.
Du kannst
mv /usr/bin/apt-get /usr/bin/apt-get2
Erstellen Sie dann eine Datei in / usr / bin / apt-get mit folgendem Inhalt:
jetzt
chmod +x /usr/bin/apt-get
quelle
$@
bewirkt, dass das Skript mit allen Argumenten funktioniert./usr/local/bin
, die vor kommt/usr/bin
in Debian und Ubuntu in den Standardpfad.apt-get
ausführbare Datei befindet sich in/usr/bin/apt-get
, nichtsbin
. (b) Leg dich nicht mit Systembefehlen an. Wie Muru sagt, können Sie eine lokale Überschreibung erstellen/usr/local/bin
, obwohl selbst dies keine gute Lösung ist.Versuchen Sie es mit einem Alias in der
.bashrc
Datei. Dies funktioniert nur, wenn Sie bei dem Konto angemeldet sind, dem die Datei entspricht. Die Syntax eines Alias lautet:alias newcommand='command1; command2; command3'
Ihre Linie könnte also ein bisschen so aussehen:alias apt-get='firstcommand; apt-get'
Oder dieses:
alias apt-get='firstcommand && apt-get'
Mit der zweiten
apt-get
wird nur ausgeführt, wennfirstcommand
erfolgreich ist.quelle