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

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

2
พฤติกรรมของ "eval" ภายใต้ "set -e" ในการแสดงออกตามเงื่อนไข
พิจารณาคำสั่ง eval false || echo ok echo also ok ปกติเราจะคาดหวังนี้จะดำเนินการfalseสาธารณูปโภคและเนื่องจากสถานะออกเป็นที่ไม่ใช่ศูนย์ไปแล้วดำเนินการและecho okecho also ok ในทุก POSIX เหมือนเปลือกหอยที่ผมใช้ ( ksh93, zsh, bash, dash, OpenBSD kshและyash) นี้เป็นสิ่งที่เกิดขึ้น set -eแต่สิ่งที่ได้รับที่น่าสนใจถ้าเราเปิดใช้งาน หากset -eมีผล OpenBSD ของshและkshเปลือกหอย (มาทั้งจากpdksh) evalจะยุติสคริปต์เมื่อการดำเนินการ ไม่มีเปลือกอื่นทำ POSIX บอกว่าข้อผิดพลาดในยูทิลิตี้บิวด์อินพิเศษ (เช่นeval) ควรทำให้เชลล์ที่ไม่มีการโต้ตอบหยุดทำงาน ฉันไม่แน่ใจทั้งหมดว่าการดำเนินการfalseถือเป็น "ข้อผิดพลาด" (ถ้าเป็นเช่นนั้นจะเป็นอิสระจากset -eการใช้งาน) วิธีแก้ปัญหานี้ดูเหมือนว่าจะใส่ไว้evalในเปลือกย่อย ( eval false ) || echo ok echo …
10 posix  openbsd  eval 

2
ทำไมกลุ่มคำสั่ง brace ต้องการช่องว่างหลังจากเปิดวงเล็บปีกกาใน POSIX Shell Grammar
TL; DR : ทำไมช่องว่างกลุ่ม POSIX รั้งจำเป็นหลังจาก{คำสงวน แต่ subshell ไม่หลังจากคำสงวน(? ไวยากรณ์ของ POSIX เชลล์กำหนดกลุ่มวงเล็บปีกกาและ subshell ดังนี้ brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' ทีนี้ถ้าเราอ่านว่าช่องว่างนั้นสำคัญมาก นี่หมายความว่าจะต้องมีพื้นที่ที่แยกเปิดและปิดวงเล็บปีกกาและวงเล็บเช่นเดียวกับใน { echo hello world; } ( echo hello world ) สิ่งนี้จะสอดคล้องกับคำสั่งคำสั่งผสม : คำสั่งผสมเหล่านี้แต่ละคำมีคำที่สงวนไว้หรือผู้ดำเนินการควบคุมในตอนเริ่มต้นและคำที่สงวนไว้สำหรับคำสั่งสุดท้ายหรือคำว่าผู้ประกอบการที่เกี่ยวข้องในตอนท้าย อย่างไรก็ตามสิ่งที่ไม่สมเหตุสมผลคือเหตุผล(list)และ( list )ทำงานได้ดี ( (ไม่จำเป็นต้องใช้พื้นที่นั้นหลังจากนั้น) อย่างไรก็ตามการขยายตัวของรั้งต้องมีพื้นที่ชั้นนำเช่น{echo hello;}ไม่ทำงาน แน่นอนว่าคำที่สงวนไว้ซึ่งได้รับการปฏิบัติเหมือนคำว่าเชลล์จำเป็นต้องเว้นวรรคเพื่อให้สอดคล้องกับแนวคิดของการแยกฟิลด์อย่างไรก็ตามคำจำกัดความของตัวเองไม่ได้พูดถึงช่องว่าง นอกจากนี้หาก{และ(ทั้งคู่ถือว่าคำที่สงวนไว้โดยนิยาม POSIX ของคำสั่งผสมทำไมพวกเขาถึงได้รับการปฏิบัติที่แตกต่างกันเกี่ยวกับอักขระช่องว่างหลังจากคำที่สงวนไว้เหล่านี้? …
10 shell  posix  subshell  syntax 

1
`\ time ',` t \ ime` และ `\ cd` จริง ๆ ทำอะไร? (สนุกกับแบ็กสแลชในเปลือกหอย)
ขณะที่คุยมากกว่าความแตกต่างระหว่าง/usr/bin/timeและเปลือก (ทุบตีและ zsh) ในตัวtimeใครบางคนบอกว่าหนึ่งสามารถใช้เป็นชวเลขที่จะได้รับ\time/usr/bin/time ครั้งแรกดูเหมือนว่าจะเป็นทางลัดที่ไร้เดียงสา แต่คำถามก็เกิดขึ้น ทำไมถึงt\imeทำงานเช่นกัน? ทำไมถึง\cdเปลี่ยนได/usr/bin/cdเร็กตอรี่ถึงแม้ว่า¹จะไม่เป็นเช่นนั้น? ดังนั้นเห็นได้ชัดว่าจะไม่เทียบเท่ากับ\foo $(which foo)คำถามคือตอนนี้: พฤติกรรมที่สังเกตได้ของ\fooทั้งใน bash และ zsh ในทุก ๆ ด้านที่ครอบคลุมโดยนิยาม POSIX ของเชลล์และถ้าเป็นเช่นนั้นทำไมมันมีพฤติกรรมเหมือนมัน? เชิงอรรถ 1: /usr/bin/cdคือบนระบบของฉัน #!/bin/sh builtin cd "$@"

2
รับเอาต์พุตของ "posix_spawn"
ดังนั้นฉันจึงสามารถเรียกใช้กระบวนการใน Unix / Linux โดยใช้ POSIX แต่มีวิธีที่ฉันสามารถจัดเก็บ / เปลี่ยนเส้นทางทั้ง STDOUT และ STDERR ของกระบวนการไปยังไฟล์ได้หรือไม่ spawn.hส่วนหัวมีการชะลอตัวของposix_spawn_file_actions_adddup2ซึ่งมีลักษณะที่เกี่ยวข้อง แต่ผมไม่แน่ใจว่าค่อนข้างวิธีการใช้งาน กระบวนการวางไข่: posix_spawn(&processID, (char *)"myprocess", NULL, NULL, args, environ); การจัดเก็บข้อมูลเอาท์พุท: ...?
9 c  posix  fork 

2
ทดสอบ POSIX และ -a
ฉันตรวจสอบสคริปต์ของฉันด้วยcheckbashismsและฉันได้รับคำเตือนดังต่อไปนี้: possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then ในข้อกำหนด 4.62.4 ของ POSIX ที่ฉันพบ primary -a primary ดำเนินการไบนารีและของผลลัพธ์หลักและหลัก ตัวดำเนินการ -a มีความสำคัญเหนือกว่าตัวดำเนินการ -o ทำไม-aและ-oไม่ถือว่าเป็นอุปกรณ์พกพา

1
การวิเคราะห์คำศัพท์สำหรับการมอบหมายในเชลล์ POSIX
สำหรับการวิเคราะห์คำศัพท์ในเชลล์ POSIX จาก http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap02.html 7. [การกำหนดชื่อคำสั่งก่อนหน้า] [เมื่อคำแรก] หากโทเค็นไม่มีอักขระ '=' กฎ 1 จะถูกนำไปใช้ มิฉะนั้นจะต้องใช้ 7b ข [ไม่ใช่คำแรก] หากโทเค็นมีอักขระ: - ถ้ามันเริ่มต้นด้วย '=' โทเค็นคำจะถูกส่งกลับ - หากตัวละครทั้งหมดที่อยู่ก่อนหน้า '=' เป็นชื่อที่ถูกต้อง (ดูที่ XBD มาตรา 3.231) โทเค็น ASSIGNMENT_WORD จะถูกส่งกลับ (อักขระที่ยกมาไม่สามารถมีส่วนร่วมในการสร้างชื่อที่ถูกต้อง) - ไม่เช่นนั้นจะไม่ระบุว่าเป็น ASSIGNMENT_WORD หรือ WORD ที่ส่งคืน การมอบหมายให้ NAME จะเกิดขึ้นตามที่ระบุไว้ในส่วน 2.9.1 'คำแรก' หมายถึงอะไร? กรณีใดคือ 'เมื่อคำแรก' กรณีใด 'ไม่ใช่คำแรก' 'เมื่อคำแรก' …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.