Solaris 11의 POSIX Awk?


13

이것은 다음 두 가지에 대한 후속 질문입니다.

Solaris 10 (SunOS 5.10)에서 다음과 같은 결과가 나타납니다.

$ 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에서 /usr/bin/awkPOSIX 표준 awk는이 같은 구문 허용하지 않는 '!x[$0]++', 그러나 /usr/xpg4/bin/awk않습니다. 지금까지는 충분합니다.

그러나 Solaris 11에서는 /usr/bin/awk조차도 있습니다 getconf PATH. 이 또한 있지만 nawk하고 oawk있다 /usr/bin, 이들은 분명히 어디에서 심볼릭 링크가 가리키는되지 않습니다.

Solaris가 POSIX 인증을 받았다는 사실을 알고 놀랐습니다.

다른 POSIX 호환 시스템에서도 작동하는 이식 가능한 코드를 사용하여 Solaris 11에서 POSIX 호환 Awk를 표준으로 얻는 방법은 무엇입니까? (또는의 존재를 확인 할 수있는 유일한 옵션 nawk또는 oawk존재한다면이 중 하나를 사용할 수 있습니까?)

그 문제를 들어, 어떤 있습니다 nawkoawk?


/usr/xpg4/bin/awkSolaris 11에 없습니까? AT & T가 개선 된 nawk"new awk" awk입니다.
Kusalananda


@ StéphaneChazelas AFAIK, 준수 할 때 전체 OS 설치 만 테스트하고 준수를 선언합니다.
jlliagre

@jlliagre, 그것은 실용적이지 않고 (상호 배타적 인 패키지도 있습니다) "선택적 패키지"의 범위를 정의해야하기 때문에 전체 OS (모든 옵션 패키지가 설치된 OS)가 될 수 없습니다.
Stéphane Chazelas

@ StéphaneChazelas 네. Solaris 10은 전체 배포라는 개념을 가지고 있으며 선택되지 않은 로켈 이외의 모든 패키지를 효과적으로 설치했지만 Solaris 11에서는 더 이상 그렇지 않습니다. "solaris-large-server"그룹이 POSIX 준수에 사용됩니다. 테스트.
jlliagre

답변:


19

전체 또는 데스크탑 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/awkawk1977 년에 릴리스 된 레거시 UNIX 구현을 준수합니다 awk. 후속 릴리스에서는 호환성이 떨어지기 때문에 기존 스크립트를 중단하지 않도록 기본 시스템 PATH에서 먼저 유지 됩니다. oawk의 동의어입니다awk

  • /usr/bin/nawk는 "새로운"버전으로 awk1986 년 SVR3.1에 처음 제공되었습니다. AwkPOSIX 표준은이 구현을 기반으로했습니다. /usr/xpg4/bin/awk전자와 거의 동일하지만 POSIX 적합성 검증 테스트에 대해 공식적으로 확인 된 것입니다.

  • /usr/gnu/bin/awk또한 /usr/bin/gawk의 GNU의 변종이다 awk. 환경 변수 POSIXLY_CORRECT가 환경 에 설정되어 있거나 -W posix옵션으로 호출 될 때 POSIX 표준의 대부분 또는 전부를 준수하는 것을 목표로 하지만 그렇지 않으면 여러 가지 고유 한 확장을 추가합니다. igawk그리고 pgawk그 자체는의 확장 gawk이며, 첫 번째 것은 파일 포함을 지원하고 두 번째는 프로파일 링을 지원합니다.

유용한 정보 는 GNU awk히스토리 장 을 참조하십시오 .

core-os패키지에 따라서 만, 솔라리스 (11) 일반 설치에 존재하는 것으로 보장 oawk/awk하고 nawk있다. 특히, 새 비전 역 영역 을 만들면 기본적으로 solaris-small-server그룹 패키지가 포함 되므로 이진 xpg4또는 gnu awk이진 파일을 모두 사용할 수 없습니다. 이것은 의도적으로 설계된 동작입니다. 이 solaris-small-server그룹은 응용 프로그램이 제대로 작동하는 데 필요한 패키지를 추가하는 최소 시작 지점입니다. 이는 전역 영역에 설치된 모든 항목이 비전 역에 설치된 이전 (Solaris 10) 방식보다 안전하고 효율적이므로 영역을 최소화하려는 경우 사용하지 않는 패키지를 제거해야합니다.

awk이러한 "소규모 서버"설치에서 POSIX 를 이식 가능한 방식으로 지원 하려면 xcu4패키지 를 설치하고 PATH를 POSIX 호환 제품으로 설정해야합니다.

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

어떤 이유로 든 해당 패키지를 설치하지 않으려면 다음 과 같이 PATH포함 된 "사용자 지정"을 사용하는 것이 좋습니다 .nawkawk

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 호환 유틸리티는 "최종 사용자", "개발자"및 "전체 설치"메타 클러스터에만 설치되었습니다. "핵심"또는 "네트워킹 지원"메타 클러스터가 설치된 시스템 또는 영역이 있으면 동일한 xpg4누락 문제가 발생합니다.

또한 /usr/xpg4/bin/awkSolaris 11 시스템 의 부족이 POSIX 준수 실패가 아님을 참고하십시오 . Open Group 인증 프로그램을 포함하여 Oracle 및 ISV가 수행하는 대부분의 테스트에는 전체 Solaris 설치 만 사용됩니다 . 축소 된 설치는 지원 되지만 자격이 없습니다 .

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을 참조 하십시오.


3
POSIX 호환 awk가 없다는 것은 POSIX 준수 실패입니다. POSIX 호환 awk가없는 시스템은 POSIX 호환 스크립트를 실행할 수 없습니다. 이러한 소규모 솔라리스 서버는 유닉스 시스템은 물론 POSIX가 아닙니다. 그리고 그들은 Open Group에서 얻은 Solaris 인증서로 다루지 않는다고 생각합니다.
Stéphane Chazelas

1
@ StéphaneChazelas 예,이 시스템은 인증되지 않았으므로 분명히 다루지 않습니다. Solaris가 규정되지 않은 하드웨어에 설치된 경우에도 마찬가지입니다. POSIX / Unix 호환은 Solaris가 제대로 작동하기위한 전제 조건이 아닙니다. Solaris 자체는 POSIX 유틸리티가 자체 유틸리티와 다를 때 POSIX 유틸리티를 사용하지 않습니다.
jlliagre

@ StéphaneChazelas 어쨌든 POSIX awk는 항상 Solaris 시스템 또는 비전 역 영역에 존재하므로 문제는 가용성에 관한 것이 아니라 명령 이름 ( nawkvs awk)으로 제한됩니다 . docs.oracle.com/cd/E53394_01/html/E54763/nawk-1.html
jlliagre

1
nawk거의 POSIX입니다 ( CONVFMT예를 들어 지원하지 않음 ). 그렇습니다. 적어도 (예 : grepPOSIX -e/ 없는 -E) 또는 tr( 없는)만큼 나쁘지 않습니다 tr a-f A-F.
Stéphane Chazelas

@ StéphaneChazelas 사실, 설명이 답장에 추가되었습니다. 감사.
jlliagre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.