apt memberikan peringatan "Unstable CLI Interface"

63

Saya menulis skrip yang perlu membaca file yang berisi informasi dari paket yang saya tulis baris ini

apt show $PACKAGE_NAME > pack_info.txt

Namun ini tidak membuat pack_info.txtfile dan selalu memberikan Peringatan ini:

PERINGATAN: apt tidak memiliki antarmuka CLI yang stabil. Gunakan dengan hati-hati dalam skrip.

Untuk saat ini saya mencoba mengarahkan ulang STDOUT& STDERRmenggunakan &>dan berhasil memberikan file pack_info.txtyang kami butuhkan.

Saya juga mencoba mendapatkan konten dari dpkgdan itu juga berhasil:

dpkg -s $PACKAGE_NAME > pack_info.txt

Apa yang baik bahwa itu tidak menunjukkan peringatan atau kesalahan.

Apa yang buruk bahwa kami tidak ingin menggunakan dpkg dan hanya ingin STDOUT untuk mengarahkan ke file.

Jadi, saya punya tiga pertanyaan untuk ditanyakan:

  1. Apa yang sebenarnya kita maksud dengan Stable CLI Interface?
  2. Bagaimana cara aman dan bebas kesalahan menggunakan perintah tersebut dalam skrip? [mohon dijelaskan dengan contoh]
  3. Apakah ada cara untuk hanya dan hanya mengarahkan kembali STDOUT apt showke file?
C0deDaedalus
sumber

Jawaban:

80

aptadalah untuk terminal dan memberikan hasil yang bagus sementara apt-getdan apt-cacheuntuk skrip dan memberikan hasil yang stabil dan dapat diuraikan. apt showKarenanya, skrip yang setara dengan perintah Anda adalah:

apt-cache show $PACKAGE_NAME >pack_info.txt

Sekarang untuk menjawab pertanyaan Anda satu per satu:

Apa yang sebenarnya kita maksud dengan Stable CLI Interface?

aptOutput tidak dapat digunakan dengan baik dalam skrip. Misalnya, apt install(dibandingkan dengan apt-get install) menampilkan bilah progres yang tidak berguna untuk skrip dan dapat menimbulkan kesalahan saat output diuraikan. apt show firefoxmenunjukkan petunjuk untuk catatan tambahan, yang juga sama sekali tidak berguna dalam sebuah skrip, Anda ingin hanya menampilkan setiap catatan di sana - itulah yang apt-cache show firefoxdilakukannya. Mari kita lihat apa yang man aptharus dikatakan tentang itu:

Baris perintah apt (8) dirancang sebagai alat pengguna akhir dan dapat mengubah perilaku antar versi. Meskipun mencoba untuk tidak merusak kompatibilitas, ini tidak dijamin jika perubahan tampaknya bermanfaat untuk penggunaan interaktif.

Semua fitur apt (8) tersedia di alat APT khusus seperti apt-get (8) dan apt-cache (8) juga. apt (8) hanya mengubah nilai default dari beberapa opsi (lihat apt.conf (5) dan khususnya lingkup Biner). Jadi, Anda harus memilih menggunakan perintah ini (berpotensi dengan beberapa opsi tambahan diaktifkan) dalam skrip Anda karena mereka menjaga kompatibilitas sebanyak mungkin.


Bagaimana cara aman dan bebas kesalahan menggunakan perintah tersebut dalam skrip?

Cukup gunakan apt-getatau apt-cachemasing - masing alih-alih polos apt. :) Lihat jawaban ini untuk daftar setara.


Apakah ada cara untuk hanya dan hanya mengarahkan STDOUT dari acara yang tepat ke file?

Anda sudah melakukannya dengan benar: >fileatau 1>filemengarahkan ulang stdout, 2>filemengarahkan ulang stderr dan &>filemengarahkan keduanya ke file.

pencuci mulut
sumber