comando bash para obter apenas distribuição e versão

0

Estou tentando fazer com que o nome da distribuição e o número da versão entrem em conky. Atualmente, estou usando o seguinte

rpm --query centos-release

resultando em

centos-release 7-4.1708.e17.centos.x86_64

Como reduzo isso para apenas centos 7-4.1708.e17 ?

Depois de tentar todas as sugestões acabei inserindo isso no meu conky

${font Roboto:bold:size=8}${goto 95}${color1}Distribution $alignr   ${execi > 60 a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"}

com esse resultado

centos-release-7-4.1708.e17
    
por Starblight 17.01.2018 / 03:08

3 respostas

0

com sed:

$ rpm --query centos-release | sed 's/^centos-release//;s/\.centos.*//'
7-4.1708.e17

Com apenas shell:

#!/bin/sh

a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"
    
por 17.01.2018 / 03:15
1

Uma abordagem mais geral para imprimir os nomes e detalhes dos pacotes RPM em formatos personalizados é a opção --qf ou --queryformat para o comando rpm .

Para citar man rpm em parte:

Query formats are modified versions of the standard printf(3) formatting. The format is made up of static strings (which may include standard C character escapes for newlines, tabs, and other special characters) and printf(3) type formatters. As rpm already knows the type to print, the type specifier must be omitted however, and replaced by the name of the header tag to be printed, enclosed by {} characters. Tag names are case insensitive....

Você pode ver a lista de nomes de tags que o rpm conhece executando rpm --querytags . É uma longa lista, então não vou reproduzi-la aqui na íntegra. No entanto, algumas tags de interesse incluem:

name
n
version
v
release
r
arch
nvra
nvr
description

Infelizmente, para o seu caso de uso exato , o name do pacote em questão é centos-release , não centos conforme desejado e o release é 4.1708.el7.centos .

Assim, o mais próximo que você pode chegar da saída desejada com formatação de consulta rpm pura é:

rpm -q centos-release --qf 'centos %{v}-%{r}\n'

(Note o uso de uma string estática para "centos" ao invés da tag %{n} , que se expandiria para "centos-release". Observe também o espaço que você tem em sua saída desejada, embora possa ser um erro de digitação.)

Na minha caixa de teste, este comando produz:

$ rpm -q centos-release --qf 'centos %{v}-%{r}\n'
centos 7-2.1511.el7.centos.2.10
$ 
    
por 17.01.2018 / 04:34
0

Se sua versão tiver um traço (ou espaço) entre centos-release e o número que você pode ...

  • substitua "centos-release-" por "" usando sed ( s/^centos-release.// ) e
  • substitua ".centos. *" por "" ( s/\.centos.*// )
  • stdout mostra apenas o lançamento
$ rpm --query centos-release
centos-release-7-4.1708.el7.centos.x86_64

$ rpm --query centos-release | sed 's/^centos-release.//;s/\.centos.*//'
7-4.1708.el7
    
por 17.01.2018 / 03:28