如何在使用 apt-get 下载之前运行命令?

如何在使用 apt-get 下载之前运行命令?

如何在 apt-get 开始下载软件包之前运行命令?

我知道 dpkg 预调用挂钩(将脚本挂接到 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 即可完成安装(并且无需执行任何可能通过更新撤消的其他操作)。

答案1

使用 apt pre/post-invoke hooks 怎么样?

本质上,它类似于 dpkg 调用前/调用后挂钩,但对于 apt (我假设这实际上是您的使用场景中重要的挂钩)。 AFAIK还有其他的,但我只用过这样的。

例如

$ sudo cat /etc/apt/apt.conf.d/05new-hook
APT::Update::Pre-Invoke {"your-command-here"};

答案2

首先确定 apt-get 在哪里使用whereis apt-getwhich apt-get;我假设它在/usr/bin/apt-get

然后在中创建一个文件/usr/local/bin/apt-get包含以下内容:

#!/bin/bash
# (commands to run before apt-get)
exec /usr/bin/apt-get "$@"

现在chmod +x /usr/local/bin/apt-get

这应该在发行版的所有升级中都存在,但它不应该改变 apt-get 的行为(除了在执行其他操作之前运行命令之外)。作为奖励,它可以解析命令行参数,仅在真正需要时运行命令。

(这个答案建立在穆罕默德·埃特马达尔的回答,合并了 muru 的反馈)

答案3

您可以在 .bashrc 文件中使用“别名”。例如,将其放入根 .bashrc 文件中:

alias apt-get='echo blahblah && apt-get'

命令行参数将自动添加到别名的末尾。

只需替换echo blahblah为您需要的命令即可。

但在这种情况下,它仅在您执行命令时才有效(不是须藤)。

答案4

尝试在文件中使用别名.bashrc。仅当登录到该文件对应的帐户时才有效。别名的语法是:

alias newcommand='command1; command2; command3' 所以你的行可能看起来有点像这样:

alias apt-get='firstcommand; apt-get'

或这个:

alias apt-get='firstcommand && apt-get'

对于第二个,只有成功apt-get时才会执行。firstcommand

相关内容