คำถามติดแท็ก posix

POSIX เป็นตัวย่อสำหรับ Portable Operating System Interface ซึ่งเป็นตระกูลมาตรฐานที่ IEEE กำหนดไว้สำหรับการรักษาความเข้ากันได้ระหว่างระบบปฏิบัติการ


2
ตัวแยกทศนิยมปัจจุบันคืออะไร
บอกว่าฉันมีสคริปต์เชลล์ POSIX ที่ ต้องทำงานในระบบ / สภาพแวดล้อมที่แตกต่างกันซึ่งฉันไม่ได้ควบคุมและ จำเป็นต้องลบตัวแยกทศนิยมออกจากสตริงที่ปล่อยโดยโปรแกรมที่เคารพการตั้งค่าภาษา ฉันจะตรวจจับตัวแยกทศนิยมด้วยวิธีทั่วไปได้อย่างไร

3
มันเป็นส่วนหนึ่งของมาตรฐานใด ๆ (เช่น POSIX) ไฟล์ระบบนั้นควรเป็นตัวพิมพ์เล็กหรือไม่?
บริษัท ของฉันขายแอปพลิเคชันที่มีชื่อแบรนด์เป็นแบบตัวพิมพ์ผสมเช่น "ApplicationName" ตัวติดตั้งของแอปพลิเคชันจะสร้างพา ธ และชื่อไฟล์ทั้งหมดในมาตรฐานนี้ เช่นไดเร็กตอรี่หลักคือ/opt/ApplicationNameไฟล์ init ถูกเรียกใช้ApplicationNameดังนั้นฉันต้องเรียกใช้service ApplicationName statusและอื่น ๆ สำหรับฉันนี่เป็นการประชุมที่มีเหตุผลทั้งหมดและฉันรู้สึกว่าไฟล์และไดเรกทอรีควรเป็นตัวพิมพ์เล็ก (มีแอปพลิเคชั่นอื่น ๆ เช่น MySQL ซึ่งมีไฟล์และ dirs ทั้งหมดถูกเรียกmysqlใช้แม้กระทั่งแอปพลิเคชันเช่น Apache และ Tomcat อักษรตัวพิมพ์ใหญ่). หากฉันยกเป็นรายงานข้อผิดพลาดฉันต้องการที่จะโต้แย้งที่แข็งแกร่งกว่าเพียงแค่ "ฉันคิดว่ามันผิด" ดังนั้นมันจึงเป็นไปตามมาตรฐาน POSIX ที่ไฟล์ระบบแบบนี้ควรเป็นตัวพิมพ์เล็ก?

11
เหตุใดเชลล์จึงไม่แก้ไข“ การใช้แมวที่ไร้ประโยชน์” โดยอัตโนมัติ? [ปิด]
หลายคนใช้ oneliners และสคริปต์ที่มีรหัสตามบรรทัด cat "$MYFILE" | command1 | command2 > "$OUTPUT" ครั้งแรกที่catมักจะเรียกว่า "การใช้ประโยชน์จากแมว" เพราะในทางเทคนิคมันต้องเริ่มต้นกระบวนการใหม่ (มัก/usr/bin/cat) ซึ่งสามารถหลีกเลี่ยงได้ถ้าคำสั่งได้รับ < "$MYFILE" command1 | command2 > "$OUTPUT" เพราะเชลล์จะต้องเริ่มcommand1และชี้stdinไปที่ไฟล์ที่กำหนดเท่านั้น เหตุใดเปลือกจึงไม่ทำการแปลงนี้โดยอัตโนมัติ ฉันรู้สึกว่าไวยากรณ์ "ใช้งานไร้ประโยชน์ของแมว" ง่ายต่อการอ่านและเชลล์ควรมีข้อมูลเพียงพอที่จะกำจัดแมวไร้ประโยชน์โดยอัตโนมัติ catถูกกำหนดไว้ในมาตรฐาน POSIX เพื่อให้เปลือกควรได้รับอนุญาตที่จะใช้มันภายในแทนการใช้ไบนารีในเส้นทาง เชลล์สามารถมีการนำไปใช้งานสำหรับอาร์กิวเมนต์หนึ่งรุ่นเท่านั้นและทางเลือกในการไบนารี

4
เชลล์ได้รับอนุญาตให้ออปติไมซ์คำสั่งยุติการใช้งานอย่างไร้ประโยชน์หรือไม่?
หากมีการขอให้เชลล์ดำเนินการคำสั่งที่ไร้ประโยชน์ ( หรือไร้ประโยชน์บางส่วน ) ที่ทราบว่าจะยุติเช่นcat hugeregularfile.txt > /dev/nullมันสามารถข้ามการดำเนินการของคำสั่งนั้น ( หรือดำเนินการเทียบเท่าที่ถูกกว่าพูด touch -a hugeregularfile.txt ) โดยทั่วไปแล้วเชลล์มีลักษณะคล้ายกับคอมไพเลอร์ C ซึ่งมันอาจทำการแปลงใด ๆ ในซอร์สโค้ดตราบใดที่พฤติกรรมที่สังเกตได้จากภายนอกนั้นเหมือนกับถ้าเครื่องนามธรรมประเมินค่าหรือไม่ แก้ไข Nota Bene: คำถามของฉันตามที่โพสต์ในตอนแรกมีชื่อเรื่องที่ถามว่าเชลล์ได้รับอนุญาตให้ทำการปรับแต่งเหล่านี้ได้หรือไม่ ฉันสนใจในทฤษฎีมากกว่าการปฏิบัติแม้ว่าทั้งสองยินดี

2
วิธีการพกพา (POSIX) เพื่อให้เกิดการทดแทนกระบวนการคืออะไร?
เชลล์บางตัวbashสนับสนุนการทดแทนกระบวนการซึ่งเป็นวิธีการนำเสนอผลลัพธ์กระบวนการเป็นไฟล์เช่นนี้: $ diff <(sort file1) <(sort file2) อย่างไรก็ตามโครงสร้างนี้ไม่ใช่POSIXและไม่ใช่พกพา วิธีสามารถดำเนินการเปลี่ยนตัวทำได้ในPOSIXลักษณะที่เป็นมิตร (เช่นหนึ่งซึ่งทำงาน/bin/sh) ? หมายเหตุ: คำถามไม่ได้ถามว่าจะแตกไฟล์ที่จัดเรียงสองไฟล์ได้อย่างไรซึ่งเป็นเพียงตัวอย่างที่ประดิษฐ์ขึ้นเพื่อสาธิตการทดแทนกระบวนการ !

3
shellcheck ไม่แนะนำให้ใช้ basename: ทำไม
ฉันกำลังพยายามออกshellcheck ฉันมีบางอย่างเช่นนั้น basename "${OPENSSL}" และฉันได้รับคำแนะนำต่อไปนี้ Use parameter expansion instead, such as ${var##*/}. จากมุมมองจริงฉันไม่เห็นความแตกต่าง $ export OPENSSL=/opt/local/bin/openssl $ basename ${OPENSSL} openssl $ echo ${OPENSSL##*/} openssl เนื่องจากbasenameเป็นข้อมูลจำเพาะของ POSIXฉันจึงไม่มีเหตุผลว่าทำไมจึงควรเป็นวิธีปฏิบัติที่ดีที่สุด คำใบ้ใด ๆ

4
sed บน OSX insert ที่บรรทัดหนึ่ง
ดังนั้นฉันจึงใช้ 'sed' บน linux มาระยะหนึ่งแล้ว แต่มีปัญหาเล็กน้อยในการพยายามใช้กับ OSX ตั้งแต่ 'POSIX sed' และ 'GNU sed' มีความแตกต่างกันเล็กน้อย ขณะนี้ฉันกำลังดิ้นรนกับวิธีการแทรกบรรทัดข้อความหลังจากหมายเลขบรรทัดที่แน่นอน (ในกรณีนี้สาย 4) บน linux ฉันจะทำสิ่งนี้: sed --in-place "4 a\ mode '0755'" file.txt ดังนั้นใน OSX ฉันลองนี้: sed -i "" "4 a\ mode '0755'" file.txt อย่างไรก็ตามสิ่งนี้ทำให้ฉันมีข้อผิดพลาด 'ตัวละครพิเศษหลังจาก \ ที่ส่วนท้ายของคำสั่ง' ความคิดใดที่นี่มีอะไรผิดปกติ? ฉันพิมพ์ผิดหรือไม่? หรือฉันไม่เข้าใจความแตกต่างระหว่างรุ่นของ sed อีกไหม
24 sed  osx  posix  gnu 

1
ตั้งแต่เมื่อ POSIX และ GNU rm ไม่ลบ /?
เป็นเวลาหลายปีแล้วที่rmยูทิลิตี้GNU จะไม่ลบ/จนกว่าจะมีการเรียกพร้อมกับ--no-preserve-rootตัวเลือก อย่างไรก็ตามคำสั่งrm -rf /ดังกล่าวถูกขังอยู่ในจิตใต้สำนึกส่วนรวมว่าเป็นอันตรายมาเป็นเวลานานและผู้คนก็มักจะอ้างว่ามันเป็นคำสั่ง "น่ากลัว" ฉันสงสัยว่าเมื่อกฎนี้ที่rmไม่สามารถลบ/ปรากฏขึ้นครั้งแรก ฉันตรวจสอบรายละเอียด POSIX แล้วและฉันสามารถเห็นได้ว่าในขณะที่POSIX: 2008มีคุณสมบัติความปลอดภัยนี้POSIX: 2001จะไม่ทำงาน เนื่องจากข้อมูลจำเพาะ POSIX เวอร์ชันออนไลน์ได้รับการอัปเดตเป็นครั้งคราวด้วยการเปิดตัวย่อยใหม่แต่ละครั้งฉันจึงตรวจสอบเครื่อง wayback และพบหน้าเว็บที่เกี่ยวข้องของ POSIX: 2008 จากปี 2010และสามารถยืนยันได้ว่ากฎที่rmไม่สามารถลบได้/ได้รับการจดทะเบียนแล้ว ดังนั้นคำถามของฉันคือ: เมื่อใดที่กฎที่rmไม่สามารถลบการ/เพิ่มลงในข้อมูลจำเพาะ POSIX ได้ มันเป็นรุ่น 2008 ของ Single UNIX Specification เวอร์ชั่น 4 หรือเพิ่มเข้ามาในการแก้ไขไหม? ข้อ จำกัด นี้ถูกเพิ่มลงใน GNU เมื่อrmใด ฉันค่อนข้างแน่ใจว่าก่อนที่มันจะถูกเพิ่มใน POSIX แต่เมื่อมันเกิดขึ้น?
23 rm  posix  history  gnu 

4
วิธีที่เข้ากันได้กับ POSIX เพื่อรับชื่อผู้ใช้ที่เชื่อมโยงกับ ID ผู้ใช้
ฉันมักจะต้องการชื่อเข้าสู่ระบบที่เชื่อมโยงกับ ID ผู้ใช้และเนื่องจากมันพิสูจน์แล้วว่าเป็นกรณีการใช้งานทั่วไปฉันตัดสินใจที่จะเขียนฟังก์ชันเชลล์เพื่อทำสิ่งนี้ ในขณะที่ฉันใช้ดิสทริบิวชัน GNU / Linux เป็นหลักฉันพยายามเขียนสคริปต์ของฉันให้พกพาได้มากที่สุดและเพื่อตรวจสอบว่าสิ่งที่ฉันทำอยู่นั้นใช้กับ POSIX ได้ การแยกวิเคราะห์ /etc/passwd วิธีแรกที่ฉันพยายามคือการแยกวิเคราะห์/etc/passwd(โดยใช้awk) awk -v uid="$uid" -F: '$3 == uid {print $1}' /etc/passwd อย่างไรก็ตามปัญหาด้วยวิธีนี้คือการเข้าสู่ระบบอาจไม่ได้อยู่ในพื้นที่เช่นการตรวจสอบผู้ใช้อาจจะผ่าน NIS หรือ LDAP ใช้getentคำสั่ง การใช้getent passwdเป็นแบบพกพามากกว่าการแยกวิเคราะห์/etc/passwdเนื่องจากยังทำการสืบค้นฐานข้อมูล NIS หรือ LDAP ที่ไม่ใช่ท้องถิ่น getent - Wikipedia getent (1) - หน้าลินุกซ์ getent passwd "$uid" | cut -d: -f1 น่าเสียดายgetentที่ POSIX …
23 users  posix 

2
POSIX รับประกันเส้นทางไปยังยูทิลิตี้มาตรฐานหรือไม่?
จาก C วิธีที่ง่ายที่สุดในการใช้ยูทิลิตี้มาตรฐาน (เช่น ps) และอื่น ๆ คืออะไร? POSIX รับประกันว่ามาตรฐานpsนั้นอยู่ใน/bin/psหรือฉันควรรีเซ็ตตัวแปรสภาพแวดล้อม PATH เป็นสิ่งที่ฉันได้รับconfstr(_CS_PATH, pathbuf, n);จากนั้นเรียกใช้ยูทิลิตีผ่าน PATH-search หรือไม่
22 path  c  posix  exec 

2
ต้องมีเงื่อนไขอะไรบ้างสำหรับไฟล์ที่จะเป็นไฟล์ข้อความตามที่กำหนดโดย POSIX
POSIX กำหนดไฟล์ข้อความเป็น: ไฟล์ที่มีตัวอักษรจัดเป็นศูนย์หรือมากกว่าบรรทัด บรรทัดไม่มีอักขระ NUL และไม่มีความยาวเกิน {LINE_MAX} ไบต์รวมถึงอักขระ <newline> แม้ว่า POSIX.1-2017 จะไม่แยกความแตกต่างระหว่างไฟล์ข้อความและไฟล์ไบนารี (ดูมาตรฐาน ISO C) แต่ยูทิลิตี้จำนวนมากจะสร้างเอาต์พุตที่สามารถคาดการณ์ได้หรือมีความหมายเมื่อทำงานกับไฟล์ข้อความ ยูทิลิตี้มาตรฐานที่มีข้อ จำกัด ดังกล่าวจะระบุ "ไฟล์ข้อความ" ในส่วน STDIN หรือ INPUT FILES เสมอ ที่มา: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 อย่างไรก็ตามมีหลายสิ่งที่ฉันไม่ชัดเจน: ไฟล์ข้อความต้องเป็นไฟล์ปกติหรือไม่ ในข้อความที่ตัดตอนมาข้างต้นมันไม่ได้บอกอย่างชัดเจนว่าไฟล์จะต้องเป็นไฟล์ปกติ ไฟล์สามารถพิจารณาเป็นไฟล์ข้อความได้หรือไม่หากมีอักขระหนึ่งตัวและหนึ่งตัวเท่านั้น (เช่นอักขระเดียวที่ไม่ได้ขึ้นบรรทัดใหม่ด้วย) ฉันรู้ว่าคำถามนี้อาจฟังดูไร้ค่า แต่พวกเขาใช้คำว่า "ตัวอักษร" แทน "หนึ่งตัวหรือมากกว่า" คนอื่นอาจไม่เห็นด้วย แต่ถ้าพวกเขาหมายถึง "หนึ่งตัวหรือมากกว่า" ฉันคิดว่าพวกเขาควรพูดอย่างชัดเจน ในข้อความที่ตัดตอนมาด้านบนมันทำให้การอ้างอิงถึง "เส้น" ฉันพบคำจำกัดความสี่บรรทัดในชื่อ: "Empty Line", "Display Line", "Inline …
22 files  posix  text 

2
มีวิธี POSIX ในการตั้งค่าอาร์กิวเมนต์ zeroth ของแอปพลิเคชันเป้าหมายหรือไม่?
ในbashคุณสามารถใช้exec -aและzshคุณสามารถผลัดกันยังตั้งARGV0ในการรันโปรแกรมที่มีการโต้แย้งข้อที่ศูนย์บาง แต่มียังเป็นวิธีที่ POSIX ของการทำเพื่อ? ตามที่แนะนำในความคิดเห็นนี้คุณสามารถสร้างลิงก์สัญลักษณ์ (ชั่วคราว) เพื่อให้ได้สิ่งนี้ แต่วิธีนี้ฉันไม่สามารถตั้งค่าอาร์กิวเมนต์ zeroth ใหม่ให้เป็นค่าใดก็ได้ตามอำเภอใจเช่นคำสั่งที่มีเส้นทางแน่นอน มีวิธีอื่นอีกไหม?

1
POSIX ต้องการอะไรสำหรับเอกสารที่ยกมาที่นี่ภายในการทดแทนคำสั่ง?
ในคำถามนี้มีคนรายงานปัญหาการใช้ที่นี่เอกสารด้วยคำคั่นอ้างภายใน$(...)แทนคำสั่งที่เครื่องหมาย\ที่ท้ายบรรทัดภายในการเรียกเอกสารการขึ้นบรรทัดใหม่เข้าสู่เส้นต่อเนื่องขณะเดียวกันที่นี่เอกสารนอกงานคำสั่งเปลี่ยนตัวตามที่คาดไว้ . นี่คือตัวอย่างเอกสารที่ง่ายขึ้น: cat <<'EOT' abc ` def ghi \ jkl EOT ซึ่งรวมถึง backtick หนึ่งรายการและแบ็กสแลชหนึ่งรายการที่ท้ายบรรทัด ตัวคั่นถูกยกมาดังนั้นจึงไม่มีการขยายเกิดขึ้นภายในร่างกาย ใน Bourne-alikes ทั้งหมดฉันสามารถค้นหาผลลัพธ์นี้เป็นคำต่อคำเนื้อหา หากฉันวางเอกสารเดียวกันไว้ภายในการทดแทนคำสั่งดังนี้: x=$(cat <<'EOT' abc ` def ghi \ jkl EOT ) echo "$x" จากนั้นพวกเขาจะไม่ทำงานเหมือนกันอีกต่อไป: dash, ash, zsh, ksh93, BusyBox ash, mkshและ SunOS 5.10 POSIX shทั้งหมดให้เนื้อหาคำต่อคำของเอกสารเป็นมาก่อน Bash 3.2 ให้ข้อผิดพลาดทางไวยากรณ์สำหรับ backtick ที่ไม่ตรงกัน ด้วย …

1
เกิดอะไรขึ้นกับกระบวนการ Linux แบบมัลติเธรดหากได้รับสัญญาณ
หากกระบวนการ Unix (Posix) ได้รับสัญญาณตัวจัดการสัญญาณจะทำงาน จะเกิดอะไรขึ้นกับมันในกระบวนการแบบมัลติเธรด? เธรดใดรับสัญญาณ ในความคิดของฉันสัญญาณ API ควรขยายเพื่อจัดการ (เช่นเธรดของตัวจัดการสัญญาณควรจะสามารถกำหนดได้) แต่การค้นหา infos บนเน็ตฉันพบเปลวไฟนานแค่ปีเดียวในรายชื่อส่งเมลเคอร์เนลของ linux และบน ฟอรั่มที่แตกต่างกัน ตามที่ฉันเข้าใจแล้วแนวคิดของ Linus นั้นแตกต่างจากมาตรฐาน Posix และชั้นแรกที่รองรับเลเยอร์บางส่วนถูกสร้างขึ้น แต่ตอนนี้ Linux ตามรูปแบบ posix สถานะปัจจุบันคืออะไร

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