POSIX Awk no Solaris 11?

12

Isso é mais ou menos uma pergunta de acompanhamento para os dois seguintes:

Eu vejo que no Solaris 10 (SunOS 5.10), recebo os seguintes resultados:

$ type -a awk
awk is /usr/bin/awk
$ PATH="$(getconf PATH)" type -a awk
awk is /usr/xpg4/bin/awk
awk is /usr/bin/awk
$

No Solaris 10, /usr/bin/awk não aceita a sintaxe Awk padrão do POSIX, como '!x[$0]++' , mas /usr/xpg4/bin/awk . Bom o suficiente até agora.

No entanto, no Solaris 11, há apenas /usr/bin/awk , mesmo com getconf PATH . Embora haja também nawk e oawk é /usr/bin , estes evidentemente não são apontados por links simbólicos de qualquer lugar.

Sabendo que o Solaris é certificado POSIX, isso me surpreendeu.

Como posso obter um Awk compatível com POSIX de maneira padrão no Solaris 11 usando código portátil que também funcionará em outros sistemas compatíveis com POSIX? (Ou é a única opção para verificar a existência de nawk ou oawk e usar um desses se presente?)

Para esse assunto, quais são nawk e oawk ?

    
por Wildcard 21.04.2017 / 08:07

1 resposta

19

Em uma instalação completa ou em área de trabalho do Solaris 11, há três awk implementações disponíveis, além de algumas variantes:

    /usr/bin/awk           pkg:/system/[email protected]
    /usr/bin/nawk          pkg:/system/[email protected]
    /usr/bin/oawk          pkg:/system/[email protected]

    /usr/gnu/bin/awk       pkg:/text/[email protected]
    /usr/bin/gawk          pkg:/text/[email protected]
    /usr/bin/igawk         pkg:/text/[email protected]
    /usr/bin/pgawk         pkg:/text/[email protected]

    /usr/xpg4/bin/awk      pkg:/system/xopen/[email protected]

Eles são todos "compatíveis com os padrões", embora cumpram padrões diferentes.

  • /usr/bin/awk está em conformidade com a implementação herdada do UNIX awk lançada em 1977. Ela é mantida em primeiro no PATH padrão do sistema para não quebrar os scripts existentes como awk versões posteriores quebras de compatibilidade. oawk é um sinônimo do awk

  • /usr/bin/nawk é a "nova" versão de awk , enviada pela primeira vez em SVR3.1 em 1986. Awk POSIX baseou-se nessa implementação. /usr/xpg4/bin/awk é quase idêntico ao primeiro, mas o que é formalmente verificado em relação aos testes de validação de conformidade POSIX.

  • /usr/gnu/bin/awk , também /usr/bin/gawk é a variante GNU de awk . Destina-se a cumprir com a maioria ou todo o padrão POSIX quando a variável de ambiente POSIXLY_CORRECT é definida no ambiente ou quando chamada com a opção -W posix , mas também adiciona numerosas extensões próprias específicas. igawk e pgawk são extensões para gawk , a primeira suporta arquivos include e a segunda suporta perfis.

Veja também o capítulo do histórico do GNU awk para muitos informações úteis.

Apenas é garantido que os pacotes core-os estejam presentes em uma instalação regular do Solaris 11, portanto, apenas oawk/awk e nawk estão lá. Em particular, quando você cria uma nova zona não global , ela contém por padrão o < href="https://docs.oracle.com/cd/E53394_01/html/E54814/gmkgl.html#scrolltoc"> solaris-small-server group package para que nem o xpg4 nem o gnu % Os bináriosawk estão disponíveis. Isso é por design. O solaris-small-server group é um ponto inicial mínimo ao qual você inclui os pacotes necessários para que seus aplicativos funcionem corretamente. Isso é mais seguro e eficiente do que o modo anterior (Solaris 10) em que tudo que é instalado na região global também era instalado no não global, então você precisava remover os pacotes não utilizados quando quisesse minimizar a zona.

Para obter POSIX awk suporta uma maneira portátil em tal instalação de "pequeno servidor", você precisa instalar o pacote xcu4 e definir seu PATH como compatível com POSIX:

pkg install xcu4
PATH=$(getconf PATH):$PATH

Se, por algum motivo, você não quiser instalar esse pacote, uma solução alternativa é usar um "custom" PATH contendo nawk as awk , por exemplo:

mkdir -p /opt/posix/bin
cp /usr/bin/nawk /opt/posix/bin/awk
PATH=/opt/posix/bin:$PATH

Como alternativa, você pode instalar o GNU awk e definir seu PATH para obtê-lo primeiro:

pkg install gawk
PATH=/usr/gnu/bin:$PATH

Observe que isso não é específico para o Solaris 11. A agrupamento de pacotes semelhante já existia no Solaris 10 e versões anteriores e os utilitários compatíveis com POSIX eram instalados apenas nos metaclusters" Usuário final "," Desenvolvedor "e" Instalação completa ". Ter um sistema ou uma zona instalada com o metacluster "Núcleo" ou "Suporte de rede" levaria, então, ao mesmo problema xpg4 ausente.

Note também que a falta de /usr/xpg4/bin/awk em um sistema Solaris 11 não é uma falha de conformidade POSIX. Apenas instalações completas do Solaris são usadas na grande maioria dos testes realizados pela Oracle e ISVs, incluindo a certificação do Grupo Aberto programa. Instalações reduzidas são suportadas mas não qualificadas .

Se você distribuir scripts de shell (ou aplicativos incorporando scripts de shell / comandos shell de chamada) para o Solaris 11, você só precisa definir /system/xopen/xcu4 como uma dependência em seus IPS e o instalador fará automaticamente o que é necessário para o script funcionar corretamente:

depend fmri=pkg:/system/xopen/xcu4 type=require

Veja o link

    
por 21.04.2017 / 10:19