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

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

3
ทำการทดสอบ -nt / -ot ใน POSIX sh
บิวด์อินtestและ[ยูทิลิตีมีการทดสอบ-nt("ใหม่กว่า") และ-ot("เก่ากว่า") ในเชลล์ส่วนใหญ่แม้ว่าเชลล์จะทำงานใน "โหมด POSIX" (เช่นเดียวกับยูทิลิตี้ภายนอกของชื่อเดียวกันบน ระบบที่ฉันสามารถเข้าถึงได้) การทดสอบเหล่านี้ใช้สำหรับการเปรียบเทียบการประทับเวลาการปรับเปลี่ยนในสองไฟล์ เอกสารความหมายของพวกเขาจะแตกต่างกันเล็กน้อยในการใช้งาน (โดยคำนึงถึงสิ่งที่เกิดขึ้นหากไฟล์หนึ่งหรือไฟล์อื่นที่ไม่ได้อยู่) แต่พวกเขาจะไม่รวมอยู่ในข้อมูลจำเพาะ POSIX สำหรับtestยูทิลิตี้ พวกเขาจะไม่ถูกพาไปข้างหน้าในtestยูทิลิตี้เมื่อคำสั่งแบบมีเงื่อนไขถูกลบออกจากเปลือก [KornShell] เพราะพวกเขาไม่ได้รวมอยู่ในtestยูทิลิตี้ที่มีอยู่ในการติดตั้งในอดีตของshยูทิลิตี้ สมมติว่าฉันต้องการเปรียบเทียบการประทับเวลาการปรับเปลี่ยนระหว่างไฟล์ใน/bin/shเชลล์สคริปต์แล้วดำเนินการขึ้นอยู่กับว่าไฟล์หนึ่งใหม่กว่าอีกไฟล์หนึ่งดังเช่นใน if [ "$sigfile" -nt "$timestamp" ] || [ "$sigfile.tmp" -nt "$timestamp" ] then return fi ... ยูทิลิตี้อื่น ๆ ที่ฉันสามารถใช้นอกเหนือจากmake(ซึ่งจะทำให้สคริปต์ที่เหลือไม่ได้พูดอย่างน้อยที่สุด) หรือฉันควรจะสมมติว่าไม่มีใครที่จะเรียกใช้สคริปต์ใน "การดำเนินการทางประวัติศาสตร์ของsh" หรือลาออกเพื่อเขียนเปลือกเฉพาะเช่นbash?
11 files  timestamps  posix  test 

2
POSIX รองรับการเข้ารหัสอักขระใดบ้าง
POSIX กำหนดพฤติกรรมของเครื่องมือเช่นgrep, awk, sedฯลฯ ซึ่งการทำงานกับไฟล์ข้อความ เนื่องจากเป็นไฟล์ข้อความฉันคิดว่ามีปัญหาในการเข้ารหัสอักขระ คำถาม: การเข้ารหัสอักขระรองรับ POSIX คืออะไร (หรือไฟล์ข้อความของระบบเข้ารหัสที่ POSIX สามารถจัดการได้)

2
sub-shell เป็นสิ่งเดียวกันกับ child-shell
: มีสองชื่อsubshellและเด็กเปลือก ใช่กระบวนการลูกจะเริ่มจากสิ่งนี้: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat ทุกคนมีความเสมอภาคและใช้ชื่อเดียวกันหรือไม่? ทุกคนแบ่งปันคุณสมบัติเดียวกันหรือไม่ POSIX มีคำจำกัดความนี้ : สภาวะแวดล้อมการประมวลผลเชลล์ประกอบด้วย .... แต่ลิงค์สุดท้ายของย่อหน้าด้านบนมี: สภาพแวดล้อม subshell จะต้องสร้างขึ้นซ้ำกับสภาพแวดล้อมของเชลล์ยกเว้นกับดักสัญญาณที่ไม่ได้ถูกละเว้นจะถูกตั้งค่าเป็นการกระทำเริ่มต้น และพิเศษ: การทดแทนคำสั่งคำสั่งที่จัดกลุ่มด้วยวงเล็บและรายการแบบอะซิงโครนัสจะต้องถูกดำเนินการในสภาพแวดล้อมย่อย นอกจากนี้แต่ละคำสั่งของไปป์ไลน์แบบหลายคำสั่งอยู่ในสภาพแวดล้อม subshell .... sh -c 'echo "Hello"'ไม่ได้รวมอยู่ที่นั่นควรที่จะเรียกว่า subshell ยัง?

2
[[.ch.]] หมายถึงอะไรใน regex?
ชื่อสำรอง: "ลำดับการเรียง" หรือ "องค์ประกอบเรียง" ใน regex ที่สอดคล้องกับ POSIX คืออะไร ฉันพบข้อกำหนดทางเทคนิคที่แน่นอนในส่วน 9.3.5 ของข้อกำหนด POSIXตามรายการ # 4 ในรายการ แต่ไม่ชัดเจนสำหรับฉัน ฉัน googled รอบบนเว็บสำหรับตัวอย่างและคำอธิบายและมาไม่สมบูรณ์มือเปล่า แต่ที่แน่ ๆ ไม่ได้รู้แจ้ง สิ่งเดียวที่ฉันได้รับคือในบางสถานการณ์คุณสามารถทำให้ regex ปฏิบัติกับตัวละครหลาย ๆ ตัวราวกับเป็นตัวละครเดียวเพื่อการเปรียบเทียบความยาวและกำหนดว่า "การจับคู่ที่ยาวที่สุด" คืออะไร (เนื่องจาก regexes เป็นโลภและ ส่งคืนการจับคู่ที่ยาวที่สุดที่เป็นไปได้) นั่นคือทั้งหมดใช่มั้ย ฉันมีปัญหาในการเห็นการใช้งาน แต่ฉันสงสัยว่าความเข้าใจของฉันไม่สมบูรณ์ สิ่งที่จริง "เรียง" สำหรับ regex คืออะไร? และ[[.ch.]]ตัวอย่างใน POSIX specs เกี่ยวข้องกับสิ่งนี้อย่างไร

2
วิธีการเปิด manpage grep (1p)?
ในตอนท้ายของman grepมันก็บอกว่า SEE ALSO\ POSIX Programmer's Manual Page grep(1p). ฉันไม่สามารถเปิด manpage grep(1p)ได้ ฉันจะทำอย่างไร ค้นหา net, Unix.SE และลองผิดลองถูก แต่ยังไม่มีโชค พยายาม $ man 1p grep $ man -K grep แก้ไข: ฉันใช้ Ubuntu 14.10
11 grep  man  posix 

2
ทำไม Linux / POSIX ถึงมี lchown แต่ไม่ใช่ lchmod
มันดูเหมือนว่าลินุกซ์สนับสนุนการเปลี่ยนเจ้าของเชื่อมโยงสัญลักษณ์ (คือlchown) แต่เปลี่ยนโหมด / ได้รับอนุญาตจากการเชื่อมโยงสัญลักษณ์ (คือlchmod) จะได้รับการสนับสนุน เท่าที่ฉันเห็นนี่เป็นไปตาม POSIX อย่างไรก็ตามฉันไม่เข้าใจว่าทำไมจึงสนับสนุนการดำเนินการอย่างใดอย่างหนึ่งเหล่านี้ แต่ไม่ใช่ทั้งสองอย่าง แรงจูงใจเบื้องหลังสิ่งนี้คืออะไร?

1
ทำไม 'find -exec cmd {} +' ต้องลงท้ายด้วย '{} +'
คำนำ: ผมเข้าใจความแตกต่างระหว่าง&-exec {} \; -exec {} +ฉันยังไม่ได้มีปัญหาเช่นนี้findผมเพียงแค่อยากรู้เกี่ยวกับความหมายของ เมื่อสิ้นสุด-execทะเลาะกับ+แทน;เราต้องการที่จะจบนี้กับ{} +ตัวอย่างเช่น: # FreeBSD find $ find . -type f -exec cp {} /tmp + find: -exec: no terminating ";" or "+" # GNU find is even more cryptic: $ find: missing argument to `-exec' ใช้;ในตัวอย่างเหล่านี้แทนที่จะ+ทำงานได้ดี (แต่เห็นได้ชัดว่าทำอย่างอื่น) จากPOSIX : -exec utility_name [argument ...] …
11 find  history  posix 

2
ตกลงไหมที่จะใช้“.” รันไฟล์แทนที่จะเป็น source - in .bashrc ใน Ubuntu และ OS X
ตกลงดังนั้นsourceรันสคริปต์ในเชลล์ปัจจุบันและ.แยกกันตามรายละเอียดในการรันสคริปต์ด้วย "." และด้วย "source"ตัวอย่างเช่น แต่โดยเฉพาะใน.bashrcไฟล์ของฉันฉันมี: [ -f ~/.bash_aliases ] && source ~/.bash_aliases [ -f ~/.git-completion.bash ] && source ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh ฉันสามารถแทนที่ด้วย: [ -f ~/.bash_aliases ] && . ~/.bash_aliases [ -f ~/.git-completion.bash ] && . ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh จะใช้งานได้กับ OS …
11 osx  bashrc  posix 

2
เชลล์ posix: รายการพิมพ์ของชื่อตัวแปรสภาพแวดล้อม (ไม่มีค่า)
ในวิธีที่เข้ากันได้กับ posix ที่ทำงานกับการใช้งานหลายอย่างฉันจะพิมพ์รายการตัวแปรสภาพแวดล้อมที่กำหนดไว้ในปัจจุบันโดยไม่มีค่าได้อย่างไร ในการใช้งานบางอย่าง (mksh, freebsd / bin / sh) เพียงแค่ใช้exportด้วยตัวเองจะพอดีกับการเรียกเก็บเงิน: $ export FOO2 FOO แต่สำหรับการปรับใช้อื่น ๆ (bash, zsh, dash) exportก็แสดงค่าเช่นกัน ด้วย bash ตัวอย่างเช่น: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ …

1
การขยายตัวแปรทางอ้อมใน POSIX เช่นเดียวกับในทุบตี?
เป็นไปได้หรือมีแฮ็กที่สง่างามที่จะทำการขยายตัวแปรทางอ้อมใน POSIX ที่สามารถทำได้ใน Bash? สำหรับบริบทฉันพยายามทำสิ่งต่อไปนี้: for key in ${!map_*} do # do something done แก้ไข: map_ชี้แจงฉันต้องการที่จะเข้าถึงเปลือกตัวแปรที่ขึ้นต้นด้วย

1
POSIX รับประกันว่าสาธารณูปโภคมาตรฐานอยู่ใน PATH หรือไม่?
ในส่วน "คำสั่งการค้นหาและการดำเนินการ"ข้อมูลจำเพาะ POSIX บอกว่าPATHมีการค้นหาเมื่อค้นหายูทิลิตีที่จะดำเนินการ (มีข้อยกเว้นบางประการ) ข้อกำหนดระบุถึงที่ใดก็ตามที่PATHจะเริ่มต้นเป็นค่าที่รับประกันว่าจะพบสาธารณูปโภคทั้งหมดหรือไม่ หรือฉันต้องทำสิ่งต่อไปนี้เพื่อรับประกันว่าฉันจะไม่ได้รับข้อผิดพลาด "ไม่พบคำสั่ง" เมื่อพยายามเรียกใช้ยูทิลิตี้มาตรฐานหรือไม่ PATH=$(command -p sh -c 'printf %s "${PATH}"') (ดูข้อกำหนด POSIX ของcommandยูทิลิตี้ )
11 path  posix  standard 

4
POSIX-ly จะนับจำนวนบรรทัดในตัวแปรสตริงได้อย่างไร
ฉันรู้ว่าฉันสามารถทำได้ใน Bash: wc -l <<< "${string_variable}" โดยพื้นฐานแล้วทุกสิ่งที่ฉันพบเกี่ยวข้องกับ<<<ตัวดำเนินการ Bash แต่ใน POSIX shell <<<นั้นไม่ได้ถูกกำหนดและฉันไม่สามารถหาวิธีอื่นได้เป็นเวลาหลายชั่วโมง ฉันค่อนข้างแน่ใจว่ามีวิธีแก้ปัญหาอย่างง่าย แต่น่าเสียดายที่ฉันไม่พบมัน

2
การมอบหมายเป็นเหมือนคำสั่งที่มีสถานะการออกยกเว้นเมื่อมีการทดแทนคำสั่ง?
ดูตัวอย่างต่อไปนี้และผลลัพธ์ใน POSIX เชลล์: false;echo $?หรือfalse || echo 1:1 false;foo="bar";echo $?หรือfoo="bar" && echo 0:0 foo=$(false);echo $?หรือfoo=$(false) || echo 1:1 foo=$(true);echo $?หรือfoo=$(true) && echo 0:0 ตามที่ระบุไว้โดยคำตอบที่ได้รับการโหวตสูงสุดที่/programming/6834487/what-is-the-variable-in-shell-scripting : $? ถูกใช้เพื่อค้นหาค่าส่งคืนของคำสั่งที่เรียกใช้งานครั้งสุดท้าย นี่อาจเป็นความเข้าใจผิดเล็กน้อยในกรณีนี้ดังนั้นขอนิยาม POSIX ซึ่งอ้างถึงในโพสต์จากกระทู้นั้น: ? ขยายเป็นสถานะทางออกทศนิยมของไปป์ไลน์ล่าสุด (ดูที่ Pipelines) ดังนั้นดูเหมือนว่าการมอบหมายตัวเองนับเป็นคำสั่ง (หรือมากกว่าส่วนท่อ) ที่มีค่าศูนย์ทางออก แต่จะใช้ก่อนที่ด้านขวาของการมอบหมาย (เช่นการทดแทนคำสั่งเรียกในตัวอย่างของฉันที่นี่) ฉันเห็นว่าพฤติกรรมนี้เหมาะสมจากมุมมองเชิงปฏิบัติ แต่ดูเหมือนว่าฉันค่อนข้างผิดปกติที่งานมอบหมายจะนับตามลำดับนั้น อาจจะชัดเจนมากกว่านี้ทำไมมันแปลกสำหรับฉันลองสมมติว่าการบ้านเป็นหน้าที่: ASSIGNMENT( VARIABLE, VALUE ) แล้วfoo="bar"จะเป็น ASSIGNMENT( "foo", "bar" …

2
จะส่งเอาต์พุตทั้งหมดไปยัง 'logger' ใน POSIX เชลล์ได้อย่างไร?
ฉันต้องการที่จะเข้าสู่ระบบการส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานแยกต่างหากในการใช้.xprofile loggerใน Bash ฉันคิดว่ามันจะมีหน้าตาแบบนี้: exec 1> >(logger --priority user.notice --tag $(basename $0)) \ 2> >(logger --priority user.error --tag $(basename $0)) ฉันจะทำสิ่งนั้นในลักษณะที่รองรับPOSIX /bin/shได้อย่างไร
10 shell  pipe  posix 


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