Como obter propriedades pkg em formato legível por máquina no Solaris 11

3

Eu gostaria de poder extrair (de dentro de um script de shell) os atributos de um pacote IPS. Basicamente eu estou atrás exatamente da mesma informação que está listada com o comando pkg info , mas infelizmente este comando lista informações em um formato que não é muito amigável para ler dentro de um script. Exemplo abaixo:

$ pkg info archiver/gnu-tar
          Name: archiver/gnu-tar
       Summary: GNU version of the tar archiving utility
   Description: Tar is a program for packaging a set of files as a single
                archive in tar format.
      Category: Development/GNU
         State: Installed
     Publisher: solaris
       Version: 1.26
 Build Release: 5.11
        Branch: 0.175.0.0.0.2.537
Packaging Date: October 19, 2011 09:11:16 AM
          Size: 1.73 MB
          FMRI: pkg://solaris/archiver/[email protected],5.11-0.175.0.0.0.2.537:20111019T091116Z

Eu esperava que algo como pkg get-property pkg.summary archiver/gnu-tar estivesse disponível como um comando, mas não encontrasse esse comando. Eu realmente odiaria tentar analisar a saída acima. Em segundo lugar, as man pages afirmam claramente que a saída de pkg info se destina a ser lida por humanos, não por máquinas.

    
por peterh 16.08.2012 / 10:21

2 respostas

4

A maioria dos pkg info reports vem das ações set do pacote que definem atributos de pacote e outros metadados. Para o seu exemplo de archiver / gnu-tar:

% pkg contents -t set -o name,value archiver/gnu-tar
NAME                          VALUE
info.classification           org.opensolaris.category.2008:Development/GNU
info.source-url               http://ftp.gnu.org/gnu/tar/tar-1.26.tar.bz2
info.upstream-url             http://www.gnu.org/software/tar/
org.opensolaris.arc-caseid    PSARC/2000/488
org.opensolaris.consolidation userland
pkg.description               Tar is a program for packaging a set of files as a single archive in tar format.
pkg.fmri                      pkg://solaris/archiver/[email protected],5.11-0.175.1.0.0.20.0:20120709T173816Z
pkg.summary                   GNU version of the tar archiving utility
variant.arch                  ['i386', 'sparc']

% pkg contents -H -t set -o value -a name=pkg.summary archiver/gnu-tar
GNU version of the tar archiving utility
    
por 16.08.2012 / 16:37
2

Aqui está como eu faria isso analisando a saída de informações do pkg:

$ pkg info archiver/gnu-tar | nawk '
/^ *[A-Za-z ]*:/ {
    gsub("^ *","",$1)
    if(NR>1) printf("\n")
    name=substr($0,1,index($0,":")-1);
    value=substr($0,index($0,":")+1);
    gsub(" ","_",name);
    printf("%s=%s",name,value)
    next
}
{
  gsub("^ *","",$1)
  printf("%s",$0)
} ' | sed -e 's/= /="/' -e 's/$/"/'

Saída:

Name="archiver/gnu-tar"
Summary="GNU version of the tar archiving utility"
Description="Tar is a program for packaging a set of files as a singlearchive in tar format."
Category="Development/GNU"
State="Installed"
Publisher="solaris"
Version="1.26"
Build_Release="5.11"
Branch="0.175.0.0.0.2.537"
Packaging_Date="October 19, 2011 09:11:16 AM"
Size="1.73 MB"
FMRI="pkg://solaris/archiver/[email protected],5.11-0.175.0.0.0.2.537:20111019T091116Z"
    
por 16.08.2012 / 12:25