Paksa apt-get untuk meminta ya / tidak


11

Apakah ada cara untuk memaksa apt-getmenampilkan ya / tidak prompt? Ada --force-yespilihan, tetapi tampaknya tidak ada --force-promptatau opsi serupa. Jika Anda mencoba untuk menginstal paket yang semua dependensinya telah diinstal, itu akan memulai instalasi tanpa menampilkan prompt ya / tidak. Ini bisa merepotkan jika Anda ingin meninjau apakah dependensi ada dan mana yang akan diinstal karena Anda tidak tahu apakah dependensi potensial diinstal sebelumnya.

CATATAN: Kapan "apt-get install" meminta saya untuk mengkonfirmasi apakah saya ingin melanjutkan atau tidak? agak terkait dalam hal itu menjelaskan dalam kondisi standar apa prompt ditampilkan. Saya tertarik untuk mengetahui bagaimana memaksanya.


1
"Ini bisa merepotkan jika Anda ingin meninjau apakah dependensi ada dan mana yang akan diinstal." Saya bingung dengan ini. Jika tidak ada dependensi yang diinstal, apa yang Anda tinjau?
Faheem Mitha

2
Pertanyaan menarik. Sepertinya tidak ada cara untuk melakukan ini, kecuali menambal apt-getdengan opsi yang sesuai. Namun, pilihan hipotetis ini tampaknya tidak terlalu berguna bagi saya, terus terang.
Faheem Mitha

@FaheemMitha Tujuan saya untuk melakukan ini adalah jauh lebih mudah untuk mengetahui dependensi baru apa yang bisa / akan diinstal menggunakan apt-get installdaripada apt-cache showpkg.
user369450

Jawaban:


10

Tidak ada cara untuk melakukan ini dengan implementasi apt-get saat ini, Anda harus membuka permintaan fitur dan mengajukan banding ke pengelola. Perilaku apt-get saat ini adalah bahwa ketika daftar paket yang secara implisit Anda nyatakan diinstal sama dengan jumlah paket yang diinstal, dan tidak ada paket lain yang terpengaruh dengan peningkatan atau kerusakan, apt-get menganggap pengguna sudah yakin apa yang akan dilakukan , jika Anda tidak yakin atau ingin menganalisis apa yang akan dilakukan tanpa benar-benar menginstal paket, Anda dapat menggunakan rekomendasi Costas dari -s, --simulate, --just-print, --dry-run, --recon, --no-act.

Ada alat-alat lain seperti apt-listbugs yang akan menganalisis versi paket yang akan diinstal sebelum Anda benar-benar menginstalnya (dalam hal ini untuk bug) dan memperingatkan Anda.


4

Perintah mengasumsikan yeshanya dalam kasus menginstal satu paket (yang dimulai dari baris perintah) DAN semua dependensi dalam sistem sudah yaitu tidak ada untuk menginstal kecuali satu paket yang diminta.

Dengan kata lain "jika tidak ada yang terlihat (tidak ada paket tambahan) maka tidak ada prompt (tidak ada yang meminta)".

Untuk tujuan pengujian, Anda dapat menggunakan kunci -s, --simulate, --just-print, --dry-run, --recon, --no-act


@ cpburnz jika all dependecies are installedsudah Anda tidak akan dipromosikan sehingga paket lain tidak akan diinstal.
Costas

0

Pertanyaan lama, saya bisa melihat, tetapi dalam situasi yang sama sekarang. Biasanya saya menggunakan sudo aptitude install -P PACKAGE_NAME, apa yang selalu ditanyakan sebelum menginstal. Namun sekarang di manajer paket default Debian adalah apt|apt-getdan tidak memiliki fungsi ini. Tentu saja saya masih dapat menginstal aptitudedan menggunakannya ... Namun saya telah menulis fungsi / skrip wrapper sh / bash kecil apt-getuntuk ditanyakan sebelum instalasi. Benar-benar mentah dan saya menulisnya sebagai fungsi di terminal saya.

$ 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; }

Sekarang, mari kita perjelas:

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
}

Untuk menggunakan fungsi ini sebagai skrip sh / bash cukup buat file skrip misalnya my_apt-get.shdengan konten (Catatan: listing tidak mengandung komentar, untuk membuatnya sedikit lebih pendek ;-)):

#!/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 "$@"

Kemudian masukkan untuk misalnya di ~/bin/dan membuatnya dapat dieksekusi dengan $ chmod u+x ~/bin/my_apt-get.sh. Jika direktori ~/bintermasuk dalam PATHvariabel Anda, Anda akan dapat menjalankannya hanya dengan:

$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL

Tolong dicatat:

  • Kode tidak digunakan sudo. Jika Anda menggunakan rootakun, Anda mungkin perlu menyesuaikannya.
  • Kode tidak mendukung pelengkapan otomatis shell
  • Tidak tahu bagaimana kode bekerja dengan pola shell (mis. "!", "*", "?", ...)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.