![强制 apt-get 提示是/否](https://linux22.com/image/58311/%E5%BC%BA%E5%88%B6%20apt-get%20%E6%8F%90%E7%A4%BA%E6%98%AF%2F%E5%90%A6.png)
有没有办法强制apt-get
显示是/否提示?存在一个--force-yes
选项,但似乎没有--force-prompt
或类似的选项。如果您尝试安装已安装所有依赖项的软件包,它将开始安装,而不显示是/否提示。如果您想检查依赖项是否存在以及将安装哪些依赖项,这可能会很麻烦,因为您不知道是否提前安装了潜在的依赖项。
笔记:“apt-get install”什么时候会要求我确认是否继续?有点相关,因为它描述了在什么标准条件下显示提示。我很想知道如何强制它。
答案1
目前的 apt-get 实现无法做到这一点,您需要提出功能请求并向维护者提出上诉。 apt-get 当前的行为是,当您明确请求安装的软件包列表与将要安装的软件包列表相同,并且没有其他软件包受到升级或中断的影响时,apt-get 假定用户已经确定要做什么,如果你不确定或者想分析在不实际安装包的情况下会做什么,你可以使用科斯塔斯推荐的-s, --simulate, --just-print, --dry-run, --recon, --no-act
。
还有其他工具,例如 apt-listbugs,可以在实际安装之前分析要安装的软件包的版本(在本例中是错误)并警告您。
答案2
该命令假设yes
仅在安装时一包(从命令行启动)并且中的所有依赖项系统已经除了一个要求的软件包之外不需要安装任何东西。
换句话说,“如果没有什么可看的(没有额外的包),那么就没有提示(没有什么可要求的)”。
出于测试目的,您可以使用密钥-s, --simulate, --just-print, --dry-run, --recon, --no-act
答案3
老问题,我可以看到,但现在情况类似。通常我确实使用sudo aptitude install -P PACKAGE_NAME
,安装前总是询问什么。然而现在 Debian 中默认的包管理器apt|apt-get
并没有这个功能。当然,我仍然可以安装aptitude
和使用它......但是我已经编写了小的 sh/bash 包装函数/脚本,以便apt-get
在安装之前询问。它确实是原始的,我将它作为一个函数编写在我的终端中。
$ f () { sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf'; read -p 'Do You want to continue (y/N): ' ans; case $ans in [yY] | [yY][eE][sS]) sudo apt-get -y install "$@";; *);; esac; }
现在,让我们更清楚地说:
f () {
# Do filtered simulation - without lines contains 'Inst' and 'Conf'
sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
# Interact with user - If You want to proceed and install package(s),
# simply put 'y' or any other combination of 'yes' answer and tap ENTER.
# Otherwise the answer will be always not to proceed.
read -p 'Do You want to continue (y/N): ' ans;
case $ans in
[yY] | [yY][eE][sS])
# Because we said 'yes' I put -y to proceed with installation
# without additional question 'yes/no' from apt-get
sudo apt-get -y install "$@";
;;
*)
# For any other answer, we just do nothing. That means we do not install
# listed packages.
;;
esac
}
要将此函数用作 sh/bash 脚本,只需创建脚本文件,例如my_apt-get.sh
包含内容的脚本文件(注意:列表不包含注释,以使其更短;-)):
#!/bin/sh
f () {
sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
read -p 'Do You want to continue (y/N): ' ans;
case $ans in
[yY] | [yY][eE][sS])
sudo apt-get -y install "$@";
;;
*)
;;
esac
}
f "$@"
然后将其放入 例如~/bin/
并使其可执行$ chmod u+x ~/bin/my_apt-get.sh
。如果目录~/bin
包含在您的PATH
变量中,您将可以通过以下方式简单地执行它:
$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL
请注意:
- 该代码确实使用了
sudo
.如果您使用root
帐户,则可能需要对其进行调整。 - 代码不支持shell自动补全
- 不知道代码如何与 shell 模式一起工作(例如“!”,“*”,“?”,...)