Se eu executar este comando:
awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
de um terminal, posso recuperar isso:
NAME : Debian GNU/Linux
VERSION : 8 (jessie)
(observe a formatação / espaçamento). No entanto, quando tento atribuir isso
comando para uma variável local e chamá-lo, como eu faço nesta função:
#!/bin/bash
#### Display header message ####
# $1 - message
function write_header(){
local h="$@"
echo "------------------------------"
echo " ${h}"
echo "------------------------------"
}
#### Get info about Operating System ####
function os_info(){
local namevers=$(awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release)
write_header "System Info"
echo "Operating System : $(uname --kernel-name)"
echo "Kernel Version : $(uname --kernel-release)"
echo $namevers
}
os_info
Minha formatação é desconfigurada (veja a saída após NAME):
------------------------------
System Info
------------------------------
Operating System : Linux
Kernel Version : 3.16.0-4-amd64
NAME : Debian GNU/Linux VERSION : 8 (jessie)
Eu posso contornar o erro de formatação se livrando da variável local, e chamando o awk em linhas individuais como esta:
awk -F'[="]+' '/^(NAME)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
awk -F'[="]+' '/^(VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
mas isso parece um pouco desajeitado e não segue a estrutura do roteiro maior que estou escrevendo. Alguma sugestão sobre como consertar isto?
Por favor, note: eu não posso usar o LSB module
porque algumas máquinas que estou testando este script não tem esse pacote instalado. Além disso, as coisas precisam ser executadas sem privilégios elevados.