В полной или настольной установке Solaris 11 доступно три awk реализации, а также несколько вариантов:
/ 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
Все они «соответствуют стандартам», хотя и соответствуют различным стандартам.
/usr/bin/awkсоответствует устаревшей awkреализации UNIX, выпущенной в 1977 году. В системной переменной PATH по умолчанию она сохраняется первой, чтобы не нарушать существующие сценарии, поскольку последующие awkвыпуски нарушают совместимость. oawkявляется синонимомawk
/usr/bin/nawkэто «новая» версия awk, впервые выпущенная в SVR3.1 в 1986 году. AwkСтандарт POSIX был основан на этой реализации. /usr/xpg4/bin/awkпочти идентичен предыдущему, но тот, который формально проверен на соответствие тестам соответствия POSIX.
/usr/gnu/bin/awkтакже /usr/bin/gawkявляется вариантом GNU awk. Он направлен на то, чтобы соответствовать большинству или всем стандартам POSIX, когда переменная окружения POSIXLY_CORRECTустановлена в среде или когда вызывается с -W posixопцией, но в противном случае добавляет множество конкретных собственных расширений. igawkи pgawkсами являются расширениями gawk, первый поддерживает включаемые файлы, а второй поддерживает профилирование.
Смотрите также главу истории GNUawk для получения много полезной информации.
Только core-osпакеты гарантированно присутствуют при обычной установке Solaris 11, поэтому только oawk/awkи nawkесть. В частности, когда вы создаете новую неглобальную зону , она по умолчанию содержит solaris-small-serverгрупповой пакет, поэтому xpg4ни gnu awkдвоичные файлы, ни двоичные файлы недоступны. Это по замыслу. solaris-small-serverГруппа является минимальной начальной точкой , к которой вы добавляете необходимые пакеты для ваших приложений для правильной работы. Это более безопасный и эффективный способ, чем предыдущий (Solaris 10), когда все, что установлено в глобальной зоне, было установлено и в неглобальной, поэтому вам пришлось удалять неиспользуемые пакеты, когда вы хотели минимизировать зону.
Чтобы получить POSIX- awkподдержку переносимым способом в такой «небольшой серверной» установке, вам нужно установить xcu4пакет и настроить PATH на POSIX-совместимый:
pkg install xcu4
PATH=$(getconf PATH):$PATH
Должен ли по каким - то причинам вы не хотите установить этот пакет, обходной путь заключается в использовании «обычай» , PATHсодержащий , nawkкак awk, например:
mkdir -p /opt/posix/bin
cp /usr/bin/nawk /opt/posix/bin/awk
PATH=/opt/posix/bin:$PATH
В качестве альтернативы, вы можете установить GNU awkи настроить его, PATHчтобы получить его первым:
pkg install gawk
PATH=/usr/gnu/bin:$PATH
Обратите внимание, что это не относится к Solaris 11. Подобная группировка пакетов уже существовала в Solaris 10 и более ранних версиях, и совместимые с POSIX утилиты были установлены только в метакластерах «Конечный пользователь», «Разработчик» и «Полная установка». Установка системы или зоны с метакластером «Core» или «Networking support» привела бы к той же самой xpg4отсутствующей проблеме.
Также обратите внимание, что отсутствие /usr/xpg4/bin/awkв системе Solaris 11 не является ошибкой соблюдения POSIX. Только полные установки Solaris используются в подавляющем большинстве тестов, выполняемых Oracle и ISV, включая программу сертификации Open Group . Сокращенные установки поддерживаются, но не квалифицируются .
Если вы распространяете сценарии оболочки (или приложения, внедряющие сценарии оболочки / вызывая команды оболочки) для Solaris 11, вам просто нужно определить /system/xopen/xcu4как зависимость в их пакете IPS , и установщик автоматически сделает то, что требуется для правильной работы сценария:
depend fmri=pkg:/system/xopen/xcu4 type=require
См. Https://docs.oracle.com/cd/E53394_01/html/E54820/dependtypes.html.
/usr/xpg4/bin/awkнет в солярисе 11?nawk"новаawk", улучшенный AT & Tawk.