POSIX Awk บน Solaris 11 หรือไม่


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/awkไม่ยอมรับ POSIX ไวยากรณ์ Awk มาตรฐานเช่น'!x[$0]++'แต่/usr/xpg4/bin/awkทำ ดีพอแล้ว

อย่างไรก็ตามบน Solaris 11 มีเพียงแม้จะมี/usr/bin/awk getconf PATHแม้ว่าจะมีnawkและยังoawkเป็น/usr/binสิ่งเหล่านี้อย่างชัดเจนไม่ได้ชี้ไปที่การเชื่อมโยงจากที่ใดก็ได้

เมื่อรู้ว่า Solaris ได้รับการรับรอง POSIX สิ่งนี้ทำให้ฉันประหลาดใจ

ฉันจะรับ POSIX ที่เป็นไปตามมาตรฐานของ Awk บน Solaris 11 โดยใช้รหัสพกพาที่จะทำงานบนระบบที่สอดคล้องกับ POSIX อื่น ๆ ได้อย่างไร (หรือเป็นเพียงตัวเลือกเดียวในการตรวจสอบว่ามีอยู่nawkหรือไม่oawkและใช้อย่างใดอย่างหนึ่งเหล่านี้หากมีอยู่)

สำหรับเรื่องนั้นคือ อะไรnawkและoawk?


/usr/xpg4/bin/awkไม่ได้อยู่ใน Solaris 11? nawkคือ "ใหม่awk" AT&T ที่awkได้รับการปรับปรุง
Kusalananda


@ StéphaneChazelas AFAIK เฉพาะการติดตั้งระบบปฏิบัติการเต็มรูปแบบเท่านั้นที่ได้รับการทดสอบและประกาศว่าเป็นไปตามข้อกำหนดเมื่อปฏิบัติตาม
jlliagre

@jlliagre มันไม่สามารถเป็น OS เต็มได้ (OSes ที่ติดตั้งแพ็กเกจเสริมทั้งหมด) ซึ่งจะไม่สามารถใช้งานได้ (มีแพ็คเกจที่ไม่รวมกัน) และขอบเขตของ "แพ็คเกจเพิ่มเติม"
Stéphane Chazelas

@ StéphaneChazelasใช่ ในขณะที่ Solaris 10 มีแนวคิดของการแจกจ่ายทั้งหมดและติดตั้งแพคเกจทั้งหมดอย่างมีประสิทธิภาพ (นอกสถานที่ที่ไม่ได้เลือก) นี่ไม่ใช่กรณีของ Solaris 11 อีกต่อไปฉันเดาได้ดีที่สุดของฉันคือกลุ่ม "Solaris-large-server" ใช้สำหรับ POSIX การทดสอบ
jlliagre

คำตอบ:


19

ในการติดตั้งโซลาริส 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เป็นไปตามเดิม UNIX awkการดำเนินการปล่อยตัวในปี 1977 มันจะถูกเก็บไว้เป็นครั้งแรกในเส้นทางเริ่มต้นระบบจะไม่ทำลายสคริปต์ที่มีอยู่เป็นที่ตามมา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 ถูกติดตั้งใน metaclusters "ผู้ใช้ปลายทาง", "นักพัฒนา" และ "ติดตั้งแบบเต็ม" เท่านั้น การมีระบบหรือโซนที่ติดตั้งด้วย metacluster "Core" หรือ "การสนับสนุนเครือข่าย" จะทำให้xpg4เกิดปัญหาที่ขาดหายไปเช่นเดียวกัน

โปรดสังเกตว่าการขาด/usr/xpg4/bin/awkในระบบ Solaris 11 ไม่ใช่ความล้มเหลวในการปฏิบัติตาม POSIX มีเพียงการติดตั้งโซลาริสเต็มรูปแบบในการทดสอบส่วนใหญ่ที่ดำเนินการโดย Oracle และ ISV รวมถึงโปรแกรมการรับรองแบบเปิดของกลุ่ม การติดตั้งลดลงจะได้รับการสนับสนุนแต่ไม่ผ่านการรับรอง

หากคุณแจกจ่ายเชลล์สคริปต์ (หรือแอปพลิเคชันฝังเชลล์สคริปต์ / เรียกคำสั่งเชลล์) สำหรับ 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 ที่เข้ากันได้กับ POSIX คือความล้มเหลวในการปฏิบัติตาม POSIX ระบบที่ไม่มี POSIX ที่เข้ากันได้กับ POSIX ไม่สามารถเรียกใช้สคริปต์ที่สอดคล้องกับ POSIX โซลาริสเซิร์ฟเวอร์ขนาดเล็กเหล่านั้นไม่ใช่ POSIX ที่ใช้ระบบ Unix เพียงอย่างเดียว และฉันคิดว่าพวกเขาไม่ได้ครอบคลุมใบรับรอง Solaris ที่ได้รับจาก Open Group
Stéphane Chazelas

1
@ StéphaneChazelasใช่ระบบเหล่านี้ไม่ผ่านการรับรองดังนั้นจึงไม่ครอบคลุมอย่างชัดเจน จะเกิดขึ้นเช่นเดียวกันหากติดตั้งโซลาริสบนฮาร์ดแวร์ที่ไม่ผ่านการรับรอง POSIX / Unix ไม่สอดคล้องกับข้อกำหนดเบื้องต้นสำหรับ Solaris เพื่อให้ทำงานได้อย่างถูกต้อง โซลาริสเองไม่ใช้ยูทิลิตี้ 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อินสแตนซ์) แต่ใช่อย่างน้อยนั่นก็ไม่เลวเท่าgrep(ที่ไม่มี POSIX -e/ -Eเป็นต้น) หรือtr(ที่ไม่มีtr a-f A-F)
Stéphane Chazelas

@ StéphaneChazelasแน่นอนเพิ่มการชี้แจงไปยังคำตอบของฉัน ขอบคุณ
jlliagre
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.