Come si può dire la versione di Ubuntu su un sistema in uno script .sh (bash)?


9

Quindi sto cercando di creare un bash / eseguibile, e in esso ho bisogno di conoscere il numero di versione di Ubuntu sul sistema. Tutti i modi in cui ho trovato online consistono lsb_release -r, tuttavia non riesco a generare questo in una variabile.

Esiste un modo per ottenere la versione corrente di Ubuntu e salvarla come variabile in un eseguibile della shell?


Sì, lo apprezzo molto. Spiacente, non sapevo che ci fosse documentazione su questo. Lo apprezzo comunque
a.mosallaei

Sì, l'ho fatto. Grazie
a.mosallaei il

Risposte:


21
Var=$(lsb_release -r)
echo "$Var"

Dovrebbe fare il trucco.

Per la parte numerica aggiungere solo questo:

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

Il lsb-releasefile delle variabili

/usr/bin/lsb_releaseè uno script Python. È una breve sceneggiatura che funge da buona introduzione al linguaggio Python. Come altri hanno già detto, un modo più breve per ottenere solo il numero di versione è con lsb_release -sr.

Il /etc/lsb-releasefile definisce le variabili ambientali con le stesse informazioni fornite dal lsb_release -acomando:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

È possibile includere queste variabili di ambiente in qualsiasi momento utilizzando . /etc/lsb-release. Per testare nel tuo terminale:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS

quindi sì grazie, funziona, emette Release: 18.04. Tuttavia c'è un modo per ottenere solo il numero? Voglio essere in grado di utilizzare questa variabile in una funzione if / else nello script. Lo scopo di if / else è di scaricare la versione corretta della mia applicazione per la distribuzione di Ubuntu.
a.mosallaei

Ah non importa. @ user68186 ha risolto il mio problema. Grazie mille ragazzi!
a.mosallaei

Stavo per scrivere la risposta ma mi hai battuto! :-) Sono felice di contribuire.
user68186

4
@ a.mosallaei un avvertimento: se stai semplicemente usando la parte numerica e ignori tutto il resto, questo script avrà strani risultati su qualsiasi macchina non Ubuntu (incluse molte distribuzioni basate su Ubuntu che sono "compatibili" con Ubuntu ma hanno i loro nomi e versioni); potrebbe essere necessario verificare se il risultato lsb_release inizia con "Ubuntu" prima di utilizzare il numero.
Peteris,

1
@ a.mosallaei Dici che il tuo eseguibile verrà usato solo su computer Ubuntu. Come fai a saperlo? È meglio avere un fail-safe che esce se la distribuzione non è Ubuntu. Fidati di me, gli utenti proveranno a bloccare il tuo programma.
Kryštof Píštěk,

11

Un'alternativa è /etc/os-releaseinvece utilizzare il file. Questo è formattato come un elenco di variabili shell:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Quindi un modo semplice per analizzarlo è semplicemente sourceil file:

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

Per evitare di impostare inutilmente tutte queste variabili, è possibile generare il file in una subshell , fare eco alla variabile desiderata ed uscire dalla subshell:

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

In alternativa, puoi sempre analizzare direttamente il file:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04

1
Nota che per i derivati ​​Ubuntu, le informazioni sulla versione potrebbero riferirsi alla versione downstream (ad esempio ho VERSION_ID = "18.3" e VERSION_CODENAME = "sylvia" per la mia scatola Mint). UBUNTU_CODENAME dovrebbe essere corretto, comunque.
Roger Lipscombe,

subshell è il modo più efficace per farlo, giusto?
JamesTheAwesomeDude

@JamesTheAwesomeDude probabilmente, sì.
terdon,

8

Il lsb_releasecomando supporta un'opzione -s(o --short) per stampare solo le informazioni richieste e non l'intestazione che indica il tipo di informazioni.

Per ottenere solo il numero di versione è quindi sufficiente eseguire:

lsb_release -sr

Ad esempio, su Ubuntu 18.04 LTS, che genera:

18.04

Come per il metodo nella risposta di WinEunuuchs2Unix , è comunque ragionevole utilizzare la sostituzione dei comandi per assegnare questo output a una variabile di shell. Supponendo che tu volessi che la vervariabile contenesse il numero di rilascio:

ver="$(lsb_release -sr)"

Con -s, non c'è bisogno di analizzare il numero con cut, sed, grep, awk, forme più complesse di espansione dei parametri , o simili.

In questo utilizzo, le " "virgolette sono facoltative, ma generalmente suggerisco di citare l' espansione dei parametri e altre espansioni della shell, tranne quando c'è un motivo per non farlo.


Si Grazie! Non ho mai capito il -s, ma l'hai spiegato perfettamente! Apprezzato
a.mosallaei

5

lsb_releaseComandi brevi e semplici .

  • Solo per stampare la versione

    lsb_release -sr

    Produzione:

    18.04
  • Per stampare la descrizione

    lsb_release -sd

    Produzione:

    Ubuntu 18.04.2 LTS

Informazioni sulle bandiere utilizzate qui:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.