强制apt-get提示是/否


11

有没有办法强制apt-get显示是/否提示?--force-yes存在一个选项,但似乎没有--force-prompt或类似的选项。如果您尝试安装已经安装了所有依赖项的软件包,它将开始安装而不会显示是/否提示。如果要检查是否存在依赖项以及将安装哪些依赖项,这可能会很麻烦,因为您不知道是否提前安装了潜在的依赖项。

注意:“ apt-get install”什么时候要求我确认是否要继续?有点相关,因为它描述了在什么标准条件下显示提示。我很想知道如何强制它。


1
“如果您想查看依赖项是否存在以及将安装哪些依赖项,这可能会很麻烦。” 我对此感到困惑。如果没有安装依赖项,那么您正在审查什么?
Faheem Mitha 2014年

2
有趣的问题。似乎没有办法做到这一点,除非apt-get使用合适的选项进行修补。但是,坦白说,这种假设的选择对我来说似乎不是很有用。
Faheem Mitha 2014年

@FaheemMitha我这样做的目的是,使用/ apt-get install而不是可以发现将要/将要安装的新依赖项要容易得多apt-cache showpkg
user369450 2014年

Answers:


10

使用apt-get的当前实现无法做到这一点,您需要打开功能请求并向维护者求助。apt-get的当前行为是:当您隐式声明要安装的软件包列表等于将要安装的软件包的数量,并且没有其他软件包受到升级或中断的影响时,apt-get会假定用户已经是肯定的什么事情做,如果你不知道或者想分析一下,但实际上不安装包来完成,你可以使用科斯塔斯推荐-s, --simulate, --just-print, --dry-run, --recon, --no-act

还有诸如apt-listbugs之类的其他工具,它们会在实际安装软件包之前对它们进行分析(在本例中为bug)并警告您。


4

该命令假定yes仅在安装一个软件包(从命令行启动)的情况下,并且系统中的所有依赖项都已安装,即除了一个要求的软件包外,没有其他要安装的软件包。

换句话说,“如果没什么可看的(没有多余的包裹),那么就没有提示(没什么可要求的)”。

出于测试目的,您可以使用钥匙 -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz(如果all dependecies are installed已经存在)将不会被提示,因此将不会安装任何其他软件包。
Costas 2014年

0

我可以看到一个老问题,但现在情况类似。通常我会使用sudo aptitude install -P PACKAGE_NAME,安装前总是问什么。但是,现在Debian中的默认软件包管理器是apt|apt-get并且它不具有此功能。当然我仍然可以安装aptitude和使用它。但是我apt-get在安装前写了一些小的sh / bash包装函数/脚本来询问。它真的很原始,我在终端中将其编写为函数。

$ 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帐户,则可能需要对其进行调整。
  • 该代码不支持外壳自动补全
  • 不知道代码如何与外壳模式一起工作(例如“!”,“ *”,“?”,...)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.