Solaris 11'de POSIX Awk?


13

Bu, aşağıdaki ikisinin aşağı yukarı takip sorusudur:

Solaris 10'da (SunOS 5.10) aşağıdaki sonuçları elde ettiğimi görüyorum:

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

Solaris 10'da /usr/bin/awkPOSIX standart Awk sözdizimini kabul etmez '!x[$0]++', ancak kabul /usr/xpg4/bin/awkeder. Şimdiye kadar yeterince iyi.

Ancak, Solaris 11'de sadece ile /usr/bin/awkbile var getconf PATH. Orada da olsa nawkve oawkbir /usr/binbu besbelli herhangi bir yerden sembolik bağı tarafından sivri değildir.

Solaris'in POSIX sertifikalı olduğunu bilmek beni şaşırttı.

Diğer POSIX uyumlu sistemlerde de çalışacak taşınabilir kod kullanarak Solaris 11'de POSIX uyumlu bir Awk'yi nasıl alabilirim? (Yoksa varsa bunlardan birinin varlığını kontrol etmek nawkveya oawkkullanmak için tek seçenek var mı?)

Bu madde için ne olduğunu nawk ve oawk?


/usr/xpg4/bin/awkSolaris 11'de değil mi? nawk"yeni awk", geliştirilmiş AT&T awk.
Kusalananda


@ StéphaneChazelas AFAIK, sadece tam işletim sistemi kurulumları test edilir ve uyumluluk sırasında uygunluk ilan edilir.
jlliagre

@jlliagre, tam işletim sistemi olamaz (tüm isteğe bağlı paketlerin yüklü olduğu işletim sistemleri) pratik olmayacaktır (karşılıklı olarak ayrı paketler de vardır) ve "isteğe bağlı paket" kapsamı tanımlanmalıdır.
Stéphane Chazelas

@ StéphaneChazelas Evet. Solaris 10 tüm dağıtım konseptine sahipken ve tüm paketleri (seçili yerel ayarların dışında) etkili bir şekilde kurmuş olsa da, Solaris 11'de durum böyle değil. testleri.
jlliagre

Yanıtlar:


19

Tam veya masaüstü Solaris 11 kurulumunda üç awk uygulama ve bazı varyantlar vardır:

    / usr / bin / awk pkg: /system/core-os@0.5.11-0.175.3.1.0.2.0
    / usr / bin / nawk           pkg: /system/core-os@0.5.11-0.175.3.1.0.2.0
    / usr / bin / oawk           pkg: /system/core-os@0.5.11-0.175.3.1.0.2.0

    / usr / gnu / bin / awk pkg: /text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / gawk           pkg: /text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / igawk pkg: /text/gawk@3.1.8-0.175.3.0.0.30.0
    / usr / bin / pgawk pkg: /text/gawk@3.1.8-0.175.3.0.0.30.0

    / usr / xpg4 / bin / awk       pkg: /system/xopen/xcu4@0.5.11-0.175.3.0.0.30.0

Farklı standartlara uymakla birlikte hepsi "standartlara uygundur".

  • /usr/bin/awkawk1977 yılında piyasaya sürülen eski UNIX uygulamasıyla awkuyumludur. Varsayılan sürüm PATH'de, daha sonraki sürümler kopma uyumluluğu nedeniyle mevcut komut dosyalarını bozmamak için ilk olarak tutulur . oawkeş anlamlısıawk

  • /usr/bin/nawkawk1986 yılında SVR3.1'de gönderilen "yeni" sürümüdür . AwkPOSIX standardı bu uygulamaya dayanmaktadır. /usr/xpg4/bin/awköncekiyle neredeyse aynıdır, ancak POSIX uygunluk doğrulama testlerine karşı resmi olarak kontrol edilen ile hemen hemen aynıdır.

  • /usr/gnu/bin/awk, ayrıca /usr/bin/gawkGNU varyantıdır awk. Ortam değişkeni çevreye POSIXLY_CORRECTayarlandığında veya -W posixseçenekle çağrıldığında POSIX standardının çoğuna veya tamamına uymayı amaçlamaktadır, ancak aksi takdirde çok sayıda özel kendi uzantısı ekler. igawkve pgawkkendileri için uzantılar gawk, birincisi destek dosyaları içerir ve ikincisi profil oluşturmayı destekler.

Birçok yararlı bilgi için GNU awkgeçmişi bölümüne de bakın .

Sadece core-ospaketleri böylece sadece bir Solaris 11 normal yüklemesinde mevcut olmasını garanti altına alınmıştır oawk/awkve nawkvardır. Özellikle, yeni bir global olmayan bölge oluşturduğunuzda , varsayılan olarak solaris-small-servergrup paketini içerir, böylece ne ikili dosyalar xpg4ne de gnu awkikili dosyalar kullanılabilir. Bu tasarım gereğidir. solaris-small-serverGrup düzgün çalışması için uygulamalar için gerekli olan paketler eklemek hangi minimal bir başlangıç noktasıdır. Bu, küresel bölgede yüklü olan her şeyin küresel olmayan bir alana da yüklendiği önceki (Solaris 10) yolundan daha güvenli ve verimlidir, bu nedenle bölgeyi en aza indirmek istediğinizde kullanılmayan paketleri kaldırmanız gerekir.

awkBöyle bir "küçük sunucu" kurulumunda POSIX desteğini taşınabilir bir şekilde almak için, xcu4paketi yüklemeniz ve YOLUNUZU POSIX uyumlu olana ayarlamanız gerekir :

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

Meli o paketi yüklemek istemiyorum nedense, bir geçici çözüm "kişiye özel" kullanmaktır PATHiçeren nawkolarak awkörneğin:

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

Alternatif olarak, ilk önce onu kurabilir GNU awkve ayarlayabilirsiniz PATH:

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

Bunun Solaris 11'e özgü olmadığını unutmayın. Solaris 10 ve önceki sürümlerinde benzer bir paket grubu zaten mevcuttu ve POSIX uyumlu yardımcı programlar yalnızca "Son Kullanıcı", "Geliştirici" ve "Tam kurulum" metaclusters'larına kuruldu. "Çekirdek" veya "Ağ desteği" metacluster ile yüklenmiş bir sistem veya bölge olması, aynı xpg4eksik soruna yol açacaktır .

Ayrıca /usr/xpg4/bin/awkSolaris 11 sistemindeki eksikliğin POSIX uyumluluk hatası olmadığını da unutmayın. Açık Grup sertifika programı da dahil olmak üzere Oracle ve ISV'ler tarafından gerçekleştirilen testlerin büyük çoğunluğunda yalnızca tam Solaris kurulumları kullanılır . Azalan kurulumlar desteklenir, ancak nitelikli değildir .

Solaris 11 için kabuk komut dosyalarını (veya kabuk komut dosyalarını / arama kabuğu komutlarını gömen uygulamaları) dağıtırsanız /system/xopen/xcu4, IPS paketinde bir bağımlılık olarak tanımlamanız gerekir ve yükleyici, komut dosyasının düzgün çalışması için gerekenleri otomatik olarak yapar:

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

Bkz. Https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html


3
POSIX uyumlu awk eksikliği POSIX uyum hatasıdır. POSIX uyumlu bir awk içermeyen bir sistem POSIX uyumlu komut dosyaları çalıştıramaz. Bu küçük solaris sunucusu, Unix sistemlerini yalnız bırakmadan POSIX değildir. Ve sanırım Açık Grup'tan alınan Solaris sertifikası kapsamında değiller.
Stéphane Chazelas

1
@ StéphaneChazelas Evet, bu sistemler kalifiye değildir, bu yüzden açık değildir. Solaris kalifiye olmayan bir donanıma kurulursa da aynı şey olur. POSIX / Unix uyumluluğu Solaris'in düzgün çalışması için bir önkoşul değildir. Solaris, kendi programlarından farklı olduklarında POSIX yardımcı programlarını kullanmaz.
jlliagre

@ StéphaneChazelas Her durumda, awkSolaris sisteminde veya global olmayan bir bölgede her zaman bir POSIX bulunur , bu nedenle sorun kullanılabilirlikle ilgili değil, komutun ( nawkvs awk) adıyla sınırlıdır . docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.html
jlliagre

1
nawkneredeyse POSIX'tir ( CONVFMTörneğin desteklemez ), ancak evet, en azından bu kadar kötü değil grep(POSIX'e sahip olmayan -e/ -Eörneğin) veya tr(sahip olmayan tr a-f A-F).
Stéphane Chazelas

@ StéphaneChazelas Gerçekten, cevabıma açıklama eklendi. Teşekkürler.
jlliagre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.