apt-getに強制的にyes / noを促す


11

apt-getはい/いいえのプロンプトを強制的に表示する方法はありますか?--force-yesオプションが存在しますが、何もないように思わ--force-promptまたは類似のオプション。すべての依存関係がすでにインストールされているパッケージをインストールしようとすると、yes / noプロンプトを表示せずにインストールが開始されます。潜在的な依存関係が事前にインストールされているかどうかわからないため、依存関係が存在するかどうか、およびどの依存関係がインストールされるかを確認する場合、これは面倒な場合があります。

注:「apt-get install」でいつ続行するかを確認するように求められますか?これは、プロンプトが表示される標準的な条件の下で説明するという点で多少関連しています。強制する方法を知りたいです。


1
「依存関係が存在するかどうか、およびどの依存関係がインストールされるかを確認する場合、これは面倒な場合があります。」私はこれで混乱しています。依存関係がインストールされていない場合、何を確認していますか?
Faheem Mitha、2014年

2
興味深い質問。これを行う方法はないようですapt-getが、適切なオプションを使用したパッチの適用が必要です。しかし、この架空のオプションは、率直に言って、私にはあまり役に立たないようです。
Faheem Mitha、2014年

@FaheemMithaこれを行う私の目的は、apt-get installではなくを使用してインストールできる新しい依存関係を見つけることがはるかに簡単であることですapt-cache showpkg
user369450 2014年

回答:


10

現在のapt-getの実装でこれを行う方法はありません。機能リクエストを開き、メンテナにアピールする必要があります。apt-getの現在の動作は、インストールすることを暗黙的に宣言したパッケージのリストがインストールされるパッケージの量と等しく、他のパッケージがアップグレードまたは中断の影響を受けていない場合、apt-getはすでにユーザーを想定している必ず行われるために何が起こっているかのあるあなたがわからないか、実際にパッケージをインストールせずに行われるものを分析したい場合は、あなたが使用することができ、コスタス勧告のを-s, --simulate, --just-print, --dry-run, --recon, --no-act

apt-listbugsのような他のツールがあり、実際にインストールする前に(この場合はバグの場合)インストールするパッケージのバージョンを分析して警告します。


4

コマンドはyes1つのパッケージ(コマンドラインから開始)をインストールする場合と、システムすべての依存関係、つまり、1つの要求されたパッケージ以外にインストールするものがない場合を想定ています。

言い換えれば、「見るものがない場合(追加のパッケージがない場合)、プロンプトはありません(要求するものはありません)」。

テスト目的では、キーを使用できます -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz場合all dependecies are installed、すでにあなたはなりません、他のパッケージがインストールされていませんのでpromtedされて。
コスタス

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

ご注意ください:

  • コードはを使用しますsudorootアカウントを使用している場合は、おそらくそれを調整する必要があります。
  • コードはシェルのオートコンプリートをサポートしていません
  • シェルパターンでコードがどのように機能するかわからない(例: "!"、 "*"、 "?"、...)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.