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.