Como você pode dizer a versão do Ubuntu em um sistema em um script .sh (bash)?

9

Então, eu estou tentando criar um bash / executável, e preciso saber o número da versão do Ubuntu no sistema. Todas as maneiras que encontrei on-line consistem lsb_release -r, no entanto, não posso gerar isso em uma variável.

Existe alguma maneira de obter a versão atual do Ubuntu e salvar como uma variável em um executável shell?

a.mosallaei
fonte
Sim, eu aprecio isso. Desculpe, eu não sabia que havia documentação sobre isso. De qualquer forma, eu agradeço
a.mosallaei 31/07/19
Sim, eu consegui. Obrigado
a.mosallaei

Respostas:

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

Deve fazer o truque.

Para a parte numérica, adicione apenas isso:

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

O lsb-releasearquivo de variáveis

/usr/bin/lsb_releaseé um script Python. É um script curto que serve como uma boa introdução à linguagem python. Como outros mencionaram, uma maneira mais curta de obter apenas o número da versão é com lsb_release -sr.

O /etc/lsb-releasearquivo define variáveis ​​ambientais com as mesmas informações fornecidas pelo lsb_release -acomando:

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

Você pode incluir essas variáveis ​​de ambiente a qualquer momento usando . /etc/lsb-release. Para testar no seu terminal:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
fonte
então sim obrigado, ele funciona, ele gera Release: 18.04. No entanto, existe uma maneira de obter apenas o número? Eu quero poder usar essa variável em uma função if / else no script. O objetivo do if / else é baixar a versão correta do meu aplicativo para a distribuição do ubuntu.
a.mosallaei 31/07/19
Ah deixa pra lá. @ user68186 resolveu meu problema. Muito obrigado pessoal!
a.mosallaei 31/07/19
Eu ia escrever a resposta, mas você me venceu! :-) Estou feliz em contribuir.
user68186
4
@ a.mosallaei uma palavra de cautela - se você estiver usando a parte numérica e ignorando todo o resto, esse script terá resultados estranhos em qualquer máquina que não seja o Ubuntu (incluindo muitas distribuições baseadas no Ubuntu que são "compatíveis" pelo Ubuntu mas têm seus próprios nomes e versão); pode ser necessário verificar se o resultado lsb_release começa com "Ubuntu" antes de usar o número.
Peteris
1
@ a.mosallaei Você diz que seu executável será usado apenas em computadores Ubuntu. Como você sabe disso? É melhor ter um sistema à prova de falhas que saia se a distribuição não for o Ubuntu. Confie em mim, os usuários tentarão travar seu programa.
Kryštof Píštěk 2/08/19
11

Uma alternativa é usar o /etc/os-releasearquivo. Isso é formatado como uma lista de variáveis ​​de 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

Portanto, uma maneira fácil de analisar é simplesmente sourceo arquivo:

$ . /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

Para evitar definir todas essas variáveis ​​desnecessariamente, você pode originar o arquivo em um subshell , ecoar a variável necessária e sair do subshell:

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

Como alternativa, você sempre pode apenas analisar o arquivo diretamente:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
Terdon
fonte
1
Observe que, para derivados do Ubuntu, as informações da versão podem se referir à versão downstream (por exemplo, eu tenho VERSION_ID = "18.3" e VERSION_CODENAME = "sylvia" na minha caixa do Mint). UBUNTU_CODENAME deve estar correto, no entanto.
Roger Lipscombe
subshell é a maneira mais robusta de fazer isso, certo?
JamesTheAwesomeDude
@JamesTheAwesomeDude provavelmente, sim.
terdon
8

O lsb_releasecomando suporta uma opção -s(ou --short) para imprimir apenas as informações solicitadas e não o cabeçalho que diz que tipo de informação é essa.

Para obter apenas o número da versão, basta executar:

lsb_release -sr

Por exemplo, no Ubuntu 18.04 LTS, isso gera:

18.04

Como no método da resposta do WinEunuuchs2Unix , ainda é razoável usar a substituição de comando para atribuir essa saída a uma variável do shell. Supondo que você desejasse que a vervariável contivesse o número do release:

ver="$(lsb_release -sr)"

Com -s, não há necessidade de analisar o número com cut, sed,grep , awk, formas mais complexas de expansão de parâmetros , ou algo semelhante.

Nesse uso, as " "aspas são opcionais, mas geralmente sugiro citar a expansão de parâmetros e outras expansões de shell exceto quando há um motivo para não fazê-lo.

Eliah Kagan
fonte
Sim obrigado! Eu nunca entendi o -s, mas você explicou perfeitamente! Apreciado
a.mosallaei 01/08/19
5

lsb_releaseComandos curtos e simples .

  • Para imprimir apenas a versão

    lsb_release -sr

    Resultado:

    18.04
  • Para imprimir a descrição

    lsb_release -sd

    Resultado:

    Ubuntu 18.04.2 LTS

Sobre sinalizadores usados ​​aqui:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Kulfy
fonte