Saya mencoba membuat skrip yang mengharuskan saya untuk mencetak nama kode debian sehingga saya dapat menggemakannya ke file sources.list.
Saya mencoba membuat skrip ini berfungsi di semua versi Debian, jadi saya berharap untuk mengatur variabel bash dari codename rilis. Ini akan mudah dilakukan (dengan lsb_release -c), namun gambar penerapan kami tidak mengandung lsb_release secara default - dan dengan skrip ini diperlukan untuk memperbaiki sources.list, menginstal lsb-release dengan apt-get tidak akan menjadi pilihan .
Saya telah menemukan banyak cara untuk mendapatkan nomor rilis dan info lain tentang sistem, tetapi tidak dapat menemukan tempat yang dapat diandalkan untuk mendapatkan nama kode.
Setiap ide akan sangat dihargai!
(OS Saya sedang menguji dengan ini adalah Debian Squeeze)
lsb_release
, lihat kode sumbernya dan lihat apakah Anda bersedia untuk menemukan kembali semua ituJawaban:
Anda bisa menggunakan
/etc/os-release
:sumber
pemerasan tidak disertakan
/etc/os-release
, ini adalah 'retasan' saya:sumber
Anda dapat mencetak kode bersama dengan nomor versi debian:
ATAU Anda dapat mencantumkan nama kode dari nomor dan bahasa pranth:
sumber
awk -F= '/VERSION=/ {gsub(/"/,""); print $2}' /etc/os-release
awk -F"[=\"]+" '/VERSION=/ {print $2}' /etc/os-release
awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release
Anda bisa mendapatkan kode nama distribusi Debian Anda
/etc/os-release
. Alih-alih mencoba mem-parsing file ini, Anda dapat sumbernya ke lingkungan yang baru, agar tidak berdampak pada lingkungan Anda saat ini, dan jalankanecho
perintah di lingkungan baru itu.Untuk memecahnya:
env
: Jalankan perintah di lingkungan baru.-i
: Jangan mewarisi variabel lingkungan dari lingkungan yang ada.bash
: Jalankan bash sehingga kami memiliki shell untuk sumber file os-release ke, dan untuk menjalankan perintah gema.-c
: Katakanbash
kami ingin menjalankan perintah daripada memulai shell interaktif.. /etc/os-release
: Sumber kontenos-release
ke lingkungan baru kami.os-release
berisi beberapa baris pengaturan variabel lingkungan, dan ini akan mengatur variabel lingkungan tersebut di lingkungan baru kami.;
: Pisahkan perintah ini dan jalankan perintah berikutnya.echo $VERSION_CODENAME
: Keluarkan nama kode yang ditentukan olehos-release
file.sumber
echo "$(. /etc/os-release && echo $VERSION_CODENAME"
tapi melihat bahwa tidak ada$VERSION_CODENAME
distretch
. Berita yang sangat menyedihkan.echo "$(. /etc/os-release && echo ${VERSION_CODENAME-stretch})"
yang sepertinya tidak apa-apa untuk tugas saya, tetapi terlihat burukUntuk systemd:
keluaran:
sumber
Heuristik lain adalah melihat dari mana paket-paket untuk OS yang saat ini berjalan berasal.
Varian sederhana (dan mungkin rawan kesalahan):
Cara yang lebih andal adalah mem-parsing detail dari output
apt-cache policy
(tanpa parameter lebih lanjut):apt-cache policy
mendaftar semua repositori APT yang digunakan pada sistem lokal. Kami memfilter yang berasal dari Debian, yang hanya diberi labelDebian
(mis. Bukan yang berlabel mis.Debian debug
), Kemudian hanya melihat arsip utama (bukancontrib
ataunon-free
) dan kemudian memilih nilai yang sesuai.Pendekatan yang bahkan lebih stabil adalah dengan tidak bergantung pada urutan elemen dan menemukan
n=
nilai di baris yang tersisa:Namun kemungkinan lain adalah mengurai
/var/lib/apt/lists/*Release
file sendiri daripada membiarkannyaapt-cache
:sumber
Kebutuhan saya adalah menambahkan beberapa URL di sources.list. Dan untuk dapat secara dinamis memasukkan nama kode versi, saya menggunakan potongan kode ini (bergantung pada fakta bahwa nama kode berada di antara tanda kurung): Terinspirasi oleh jawaban @PersianGulf .
grep "VERSION=" /etc/os-release |awk -F= {' print tolower($2)'}|sed s/\.*\(//g | sed s/" ".*\"//g
sumber
Memperluas jawaban @Costas , perintah itu tidak bekerja untuk 16,04 di mana ia mengembalikan nama lengkap "Xerial Xerus" tetapi saya hanya ingin "xerial" karena itulah cara repo yang saya coba tarik dari memisahkan versi yang berbeda. Perintah ini menambahkan bahwa hanya kata pertama yang akan dikembalikan, dan semuanya akan menjadi huruf kecil:
Ini bekerja untuk "jessie" juga
sumber
Hanya menggunakan
grep
:Cobalah (output pada saat menulis posting ini):
sumber
yang ini mungkin (atau mungkin tidak) menjadi pendekatan alternatif untuk apa yang ditulis bcoca di Debian squeeze - saya mengujinya Ubuntu 18.04:
sumber