Как я могу запустить команду, прежде чем apt-get начнет загружать пакет?
Я знаю о хуке dpkg pre-invoke ( подключить скрипт к apt-get ), но, похоже, он запускается после загрузки.
$ 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/
Нам нужно запустить команду перед загрузкой. Точнее: скрипт должен запускаться после вызова apt-get, но до того, как apt-get получит доступ к любому онлайн-ресурсу.
Есть ли что-то вроде зацепки перед загрузкой?
Важно, что установка может быть выполнена без замены скрипта apt-get (и без выполнения чего-либо еще, что может быть отменено обновлением).
apt-get
которая сама вызовет реальнуюapt-get
. В зависимости от объема вы хотите, чтобы функция могла быть объявлена как в/etc/profile
или~/.profile
или~/.bashrc
.Ответы:
Как насчет использования apt pre / post-invoke hooks?
По сути, это похоже на перехваты dpkg pre / post-invoke, но для apt (который, я полагаю, на самом деле важен в вашем сценарии использования) AFAIK есть и другие, но я использовал только так.
Например
источник
apt-get update
.Сначала определите, где используется apt-get
whereis apt-get
илиwhich apt-get
; Я предполагаю, что это в / usr / bin / apt-getЗатем создайте файл в / usr / local / bin / apt-get с этим содержимым:
Теперь
chmod +x /usr/local/bin/apt-get
.Это должно выдержать все обновления дистрибутива, но не должно изменять поведение apt-get (кроме запуска команды перед выполнением чего-либо еще). В качестве бонуса он может анализировать аргументы командной строки, чтобы запускать команду только тогда, когда она действительно необходима.
(Этот ответ основан на ответе Мухаммеда Этемаддара , объединенного с ответом Муру)
источник
Вы можете использовать «псевдоним» в файле .bashrc. Например, поместите это в свой корневой файл .bashrc:
Аргументы командной строки будут автоматически добавлены в конец псевдонима.
Просто замените
echo blahblah
команду, которая вам нужна.Но в этом случае он работает только тогда, когда вы выполняете команды от имени пользователя root (не sudo).
источник
alias apt-get='echo blahblah && sudo apt-get'
. Затем вам нужно всего лишь ввести терминал, например,apt-get update
безsudo
, и вам будет предложено автоматически ввести пароль sudo./usr/local/bin
или~/bin
), потому что псевдонимы плохо обрабатывают аргументы.Сначала определите, где используется apt-get
whereis apt-get
; Я предполагаю, что это в / usr / bin / apt-getа Muru говорит, Вы можете создать скрипт с именем ,
apt-get
в/usr/local/bin/
котором находится , прежде чем/usr/bin
в Debian и Ubuntu$PATH
. Затем поместите в него следующий код (/usr/local/bin/apt-get
):Спасибо Муру за предложение в качестве комментария.
Другой путь:
Конечно, есть и другой способ, который не лучше предыдущего.
Вы можете
mv /usr/bin/apt-get /usr/bin/apt-get2
Затем создайте файл в / usr / bin / apt-get с этим содержимым:
сейчас же
chmod +x /usr/bin/apt-get
источник
$@
заставляет скрипт работать с каждым аргументом./usr/local/bin
, что раньше/usr/bin
в PATH по умолчанию в Debian и Ubuntu.apt-get
Исполняемый файл находится в/usr/bin/apt-get
, а неsbin
. (б) Не связывайтесь с системными командами. Как говорит Муру, вы можете создать локальное переопределение/usr/local/bin
, хотя даже это не является хорошим решением.Попробуйте псевдоним в
.bashrc
файле. Работает только при входе в учетную запись, которой соответствует файл. Синтаксис псевдонима:alias newcommand='command1; command2; command3'
Так что ваша строка может выглядеть примерно так:alias apt-get='firstcommand; apt-get'
Или это:
alias apt-get='firstcommand && apt-get'
Со вторым,
apt-get
будет выполняться только в случаеfirstcommand
успеха.источник