如何在 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-get
或which 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